CMake入门 笔记

收集一些不错的学习资料

cmake实战入门

  1. PROJECT(HELLO)生成工程名
  2. ADD_EXECUTABLE(hello main.cpp)以右侧参数生成左侧目标参数
  3. ADD_SUBDIRECTORY(src bin)将左侧子目录下生成的目标移动到bin目录下
  4. 安装
    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右侧的相对路径下

  5. 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)指定了动态库的版本号
  6. 安装库
    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)用的则是绝对路径。最后,链接操作需要放在生成目标的后面
  7. cmake -DCMAKE_BUILD_TYPE=debug可以用gdb来调试生成的二进制文件
posted @ 2023-02-11 14:47  joel-q  阅读(27)  评论(0编辑  收藏  举报