cmake教程
1.hello world
main.cpp
1 | |
CMakeLists.txt
1 | |
构建
1 | |
Note:
1.project(name)会同时隐式定义NAME_BINARY_DIR 以及NAME_SOURCE_DIR变量
2.SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]) 定义变量:set( SRC_LIST main.cpp test.cpp)
3.ADD_EXECUTABLE(test ${SRC_LIST}) 生成名为test的可执行文件 源文件为SRC_LIST
4.变量使用${}取值,在IF控制语句中直接使用变量名
指令(参数1 参数2 …) 指令不区分大小写 参数区分大小写
》〉》以上hello world 的编译为内部编译,无法删除中间文件
5.外部构建(通常的方式)
1 | |
6.ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL]) 当前工程添加源文件存放的子目录并指定目标二进制文件存放目录:
ADD_SUBDIRECTORY(src bin)
7.cmake -DCMAKE_INSTALL_PREFIX=/usr/local . #-DCMAKE_INSTALL_PREFIX指定安装目录
8.INSTALL指令 DCMAKE_INSTALL_PREFIX默认为/usr/local目录
目标文件的安装
INSTALL(TARGETS targets…
[
[ARCHIVE|LIBRARY|RUNTIME]
[DESTINATION (dir)]
[PERMISSIONS permissions…]
[CONFIGURATIONS [Debug|Release|…]
]
[COMPONENT \
INSTALL(TARGETS myrun mylib mystaticlib
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION libstatic )
可执行文件 myrun 安装到${CMAKE_INSTALL_PREFIX}/bin 目录
动态库 libmylib 安装到${CMAKE_INSTALL_PREFIX}/lib 目录
静态库 libmystaticlib 安装到${CMAKE_INSTALL_PREFIX}/libstatic 目录
普通文件的安装
INSTALL(FILES files…
DESTINATION (dir)
[PERMISSIONS permissions…] [CONFIGURATIONS [Debug|Release|…]] [COMPONENT (component)] [RENAME (name)] [OPTIONAL])
2.静态库与动态库构建
ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)
工程目录 CMakeLists.txt
1 | |
līb目录下 CMakeLists.txt
1 | |
构建并安装
1 | |
lib目录生成libhello.so libhello.a文件,并安装到/usr/bin目录
3.外部共享库和头文件的使用
1 | |
4.cmake 常用指令
ADD_DEFINITIONS(-D…):向 C/C++编译器添加-D 定义
AUX_SOURCE_DIRECTORY(dir VARIABLE):发现一个目录下所有的源代码文件并将列表存储在一个变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)
ADD_EXECUTABLE(main ${SRC_LIST})