CMake入门 笔记
收集一些不错的学习资料
cmake实战入门
PROJECT(HELLO)
生成工程名ADD_EXECUTABLE(hello main.cpp)
以右侧参数生成左侧目标参数ADD_SUBDIRECTORY(src bin)
将左侧子目录下生成的目标移动到bin目录下- 安装
30.CMAKE_INSTALL_PREFIX
默认值是/usr/local
,安装的相对路径出自这里
31.INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake)
将安装文件到DESTINATION右侧的相对路径下
32.INSTALL(PROGRAMS runhello.sh DESTINATION bin)
将安装非目标的可执行文件到DESTINATION右侧的相对路径下
33.INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake)
将安装目录下的文件到DESTINATION右侧的相对路径下 - 库
40.SET(LIBHELLO_SRC hello.cpp)
为源文件定义一个变量
41.ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
将用右侧的源文件参数生成一个左侧的共享目标文件,文件名自动加前后缀为libhello.so
42. 由于工程中的每一个目标名是唯一的,所以,同目标名的静态库会被动态库覆盖。但是,在目标名逻辑上不一致的情况下,还可以指定实际输出名属性以实现动静态库目标同名:SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
。同时,指定的实际输出名生成的目标默认情况下也会相互覆盖,因此需要搭配一个标志来避免目标文件被清理(SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
)。属性可以通过GET_TARGET_PROPERTY(CLEAN_FLAG hello_static CLEAN_DIRECT_OUTPUT)
获取
43.SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)
指定了动态库的版本号 - 安装库
5.1.INSTALL(FILES hello.h DESTINATION include/hello)
安装头文件
5.2.INSTALL(TARGETS hello hello_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
分别安装动态库与静态库
5.3.cmake -DCMAKE_INSTALL_PREFIX=/usr ..
也可以指定安装路径;奈何Mac有安全拦截,还没搞懂怎么绕过。。
5.4.INCLUDE_DIRECTORY(/usr/include/hello)
向工程添加头文件搜索路径(可以用操作系统环境变量CMAKE_INCLUDE_DIRECTORY);此时,头文件中声明的对象可能还是未定义的,需要通过TARGET_LINK_LIBRARIES(hello libhello.so)
将生成的二进制文件与动态库关联起来,但它要求动态库文件在系统但环境变量CMAKE_LIBRARY_PATH下面;而LINK_DIRECTORIES(/home/../lib)
用的则是绝对路径。最后,链接操作需要放在生成目标的后面 cmake -DCMAKE_BUILD_TYPE=debug
可以用gdb来调试生成的二进制文件