CMake基本用法记录

前言

CMake支持大写、小写、混合大小写的命令。

CMake 添加头文件搜索路径(include_directories)

语法:

 include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])

它相当于g++选项中的-I参数的作用,也相当于 在环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用。

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

CMake 添加库文件搜索路径(link_directories)

语法:

link_directories(directory1 directory2 ...)

它相当于g++命令的-L选项的作用,也相当于环境变量中增加LD_LIBRARY_PATH的路径的作用。

eg: link_directories("/home/server/third/lib")

CMake 查找库所在目录(FIND_LIBRARY)

语法

A short-hand signature is:

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

find_library (
         
         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]
        )

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

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

添加需要链接的库文件路径link_libraries

语法:

link_libraries(library1  library2 ...)

可以链接一个,也可以多个,中间使用空格分隔.

# 直接是全路径
link_libraries(“/home/server/third/lib/libcommon.a”)
# 下面的例子,只有库名,cmake会自动去所包含的目录搜索
link_libraries(iconv)

# 传入变量
link_libraries(${RUNTIME_LIB})
# 也可以链接多个
link_libraries("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")

设置要链接的导入库(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)

link_libraries 和 target_link_libraries 区别

在cmake语法中,link_libraries和target_link_libraries是很重要的两个链接库的方式,虽然写法上很相似,但是功能上有很大区别:

  1. link_libraries用在add_executable之前,target_link_libraries用在add_executable之后
  2. link_libraries用来链接静态库,target_link_libraries用来链接导入库,即按照header file + .lib + .dll方式隐式调用动态库的.lib库

为工程生成目标文件(add_executable)

语法:

add_executable( [WIN32] [MACOSX_BUNDLE]
           [EXCLUDE_FROM_ALL]
           source1 [source2 ...])

简单的例子如下:

eg: add_executable(demo main.cpp)

资源

cmake3.0官方帮助文档地址
参考:
https://www.cnblogs.com/binbinjx/p/5626916.html#commentform
https://blog.csdn.net/u013870094/article/details/78153408
https://blog.csdn.net/bigdog_1027/article/details/79113342
https://blog.csdn.net/jigetage/article/details/84206082

你可能感兴趣的:(C)