1、安装cmake
2、工程目录如下
/root/myproject
|-- CMakeLists.txt
|-- bin
|-- build
|-- include
| `-- libtest
| `-- libtest.h
|-- lib
|-- libtest
| |-- CMakeLists.txt
| `-- src
| |-- libtest.cpp
| `-- libtest.h
`-- test
|-- CMakeLists.txt
|-- include
| `-- test.h
`-- src
`-- test.cpp
3、编写CMakeLists.txt
1)myproject下的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(MYPROJECT CXX)
SET(PROJECT_ROOT_PATH "/root/myproject")
SET(EXECUTABLE_OUTPUT_PATH "${PROJECT_ROOT_PATH}/bin") //可执行文件输出路径
SET(LIBRARY_OUTPUT_PATH "${PROJECT_ROOT_PATH}/lib") //链接库输出路径
SET(CMAKE_CXX_COMPILER "g++") //编译器选择,默认gcc
INCLUDE_DIRECTORIES("${PROJECT_ROOT_PATH}/include") //链接库的头文件路径
LINK_DIRECTORIES("${LIBRARY_OUTPUT_PATH}") //链接库路径
ADD_DEFINITIONS("-DMY_DEF") //宏
ADD_SUBDIRECTORY("./libtest") //库目录
ADD_SUBDIRECTORY("./test") //主目录
2)libtest下的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(LIBRARY_OUTPUT_NAME "libtest") //链接库的名称
#SET(PROJECT_ROOT_PATH "/root/myproject")
#SET(LIBRARY_OUTPUT_PATH "${PROJECT_ROOT_PATH}/lib")
#SET(CMAKE_CXX_COMPILER "g++")
SET(CMAKE_CXX_FLAGS_DEBUG "-fPIC -O0 -Wall -g -DDEBUG") //debug版
SET(CMAKE_CXX_FLAGS_RELEASE "-fPIC -O2 -Wall -DNDEBUG") //release版
#SET(CMAKE_BUILD_TYPE Debug) //版本选择
FILE(GLOB CXX_LIST "./src/*.cpp")
FILE(GLOB INC_LIST "./src/*.h")
ADD_LIBRARY(${LIBRARY_OUTPUT_NAME} SHARED ${CXX_LIST}) //生成动态库,STATIC生成静态库
CONFIGURE_FILE(${INC_LIST} "${PROJECT_ROOT_PATH}/include/libtest") //把头文件拷贝到指定位置
#INSTALL(FILES ${INC_LIST} DESTINATION "${PROJECT_ROOT_PATH}/include/libtest") //通过make install把头文件拷贝到指定位置
#INSTALL(TARGETS ${LIBRARY_OUTPUT_NAME} DESTINATION "${PROJECT_ROOT_PATH}/lib") //通过make install把库生成到指定位置
3)test下的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(EXECUTABLE_OUTPUT_NAME "test") //可执行文件的名称
#SET(PROJECT_ROOT_PATH "/root/myproject")
#SET(EXECUTABLE_OUTPUT_PATH "${PROJECT_ROOT_PATH}/bin")
#SET(CMAKE_CXX_COMPILER "g++")
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -Wall -g -DDEBUG")
SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -Wall -DNDEBUG")
#SET(CMAKE_BUILD_TYPE Debug)
#INCLUDE_DIRECTORIES("${PROJECT_ROOT_PATH}/include")
#LINK_DIRECTORIES("${PROJECT_ROOT_PATH}/lib")
INCLUDE_DIRECTORIES("./include") //头文件位置
FILE(GLOB CXX_LIST "./src/*.cpp")
#ADD_DEFINITIONS(-DMY_DEF)
ADD_EXECUTABLE(${EXECUTABLE_OUTPUT_NAME} ${CXX_LIST}) //生成可执行文件
TARGET_LINK_LIBRARIES(${EXECUTABLE_OUTPUT_NAME} libtest) //可执行文件需要链接的库
4、外部构建工程
进入/root/myproject/build目录,执行
cmake -DCMAKE_BUILD_TYPE=Debug .. //选择debug版
make //生成链接库和可执行文件
make clean //清除