CMAKE 常用命令整理

1. 添加包含目录: INCLUDE_DIRECTORIES

语法:

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 …])
相当于vs中的附加包含目录,例如:

    include_directories(../../../thirdparty/comm/include)

2.添加链接库文件目录:LINK_DIRECTORIES

语法:

link_directories(directory1 directory2 …)
相当于vs中的附加库目录,例如:

    link_directories(../../../third/lib)

3. 查找库所在目录FIND_LIBRARY

语法
    A short-hand signature is:

find_library ( name1 [path1 path2 …])
The general signature is:

find_library (
      <VAR>
      name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
      [HINTS path1 [path2 ... ENV var]]
      [PATHS path1 [path2 ... ENV var]]
      [PATH_SUFFIXES suffix1 [suffix2 ...]]
      [DOC "cache documentation string"]
      [NO_DEFAULT_PATH]
      [NO_CMAKE_ENVIRONMENT_PATH]
      [NO_CMAKE_PATH]
      [NO_SYSTEM_ENVIRONMENT_PATH]
      [NO_CMAKE_SYSTEM_PATH]
      [CMAKE_FIND_ROOT_PATH_BOTH |
       ONLY_CMAKE_FIND_ROOT_PATH |
       NO_CMAKE_FIND_ROOT_PATH]
     )  

如下:

    FIND_LIBRARY(RUNTIME_LIB rt /usr/lib  /usr/local/lib NO_DEFAULT_PATH)

cmake会在目录中查找,如果所有目录中都没有,值RUNTIME_LIB就会被赋为NO_DEFAULT_PATH

4.添加需要的包含文件路径:target_include_directories

target_include_directories( [SYSTEM] [BEFORE]

5. 添加需要链接的库文件路径LINK_LIBRARIES

语法:

link_libraries(library1

6. 设置要链接的库文件的名称TARGET_LINK_LIBRARIES

语法:

target_link_libraries( [item1 [item2 […]]]
[[debug|optimized|general] ] …)

以下写法都可以:

    target_link_libraries(myProject comm)       # 连接libhello.so库,默认优先链接动态库
    target_link_libraries(myProject libcomm.a)  # 显示指定链接静态库
    target_link_libraries(myProject libcomm.so) # 显示指定链接动态库

或:

    target_link_libraries(myProject libcomm.so)  #这些库名写法都可以。
    target_link_libraries(myProject comm)
    target_link_libraries(myProject -lcomm)

7. xxx_directories 和 target_xxx_directories 区别:

这类命令如:
include_directories/target_include_directories
link_directories/ target_link_libraries

主要区别在于:
  • xxx_directories 将作用于整个工程,target_xxx_directories 将作用于target 的项目
  • target目标文件必须已经存在(由命令add_executable()或add_library()所创建),并且不能被IMPORTED修饰
  • 若使用BEFORE,则它修饰的内容会被添加到属性前面。
  • 关键字INTERFACE,PUBLIC和PRIVATE指定它后面参数的作用域。PRIVATE和PUBLIC项会填充targe目标文件的INCLUDE_DIRECTORIES属性。
  • PUBLIC和INTERFACE项会填充target目标文件的INTERFACE_INCLUDE_DIRECTORIES属性。随后的参数指定包含目录。

8. 为工程生成库文件:

语法:

add_library(

9. 为工程生成目标文件:

语法:

add_executable( [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
source1 [source2 …])
例如:

    add_executable(demo main.cpp)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值