cmake 常用设定及函数

设定输出目录

变量内容备注
EXECUTABLE_OUTPUT_PATH可执行文件输出目录set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
CMAKE_ARCHIVE_OUTPUT_DIRECTORY设置静态库输出目录set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
CMAKE_LIBRARY_OUTPUT_DIRECTORY编译时lib库输出目录set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
CMAKE_RUNTIME_OUTPUT_DIRECTORY动态库输出目录set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

常用变量

变量内容备注
PROJECT_BINARY_DIR编译输出目录如${PROJECT_SOURCE_DIR}/build
PROJECT_SOURCE_DIR代码目录如果直接在代码目录下cmake,那么此变量与PROJECT_BINARY_DIR内容相同
CMAKE_INCLUDE_PATH包含头文件目录环境变量,非cmake变量
CMAKE_LIBRARY_PATH链接库目录环境变量
CMAKE_CURRENT_SOURCE_DIR当前Cmake代码目录当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIRtarget编译目录
CMAKE_CURRENT_LIST_FILE输出调用这个变量的CMakeLists.txt的完整路径
CMAKE_CURRENT_LIST_LINE输出这个变量所在的行
CMAKE_MODULE_PATH定义自己的cmake模块所在的路径
CMAKE_MODULE_PATHcmake查找cmake模块文件的目录find_package(…)时,在此变量的目录内查找
PROJECT_NAME返回通过PROJECT指令定义的项目名称
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS用来控制IF ELSE语句的书写方式

常用函数

INCLUDE_DIRECTORIES

包含头文件目录
语法:
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 …])
它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用。
include_directories(“dir1” “dir2”)

LINK_DIRECTORIES

语法:

link_directories(directory1 directory2 ...)

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

FIND_LIBRARY

语法:

find_library ( name1 [path1 path2 ...])
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]
         )

例子如下:

FIND_LIBRARY(RUNTIME_LIB rt /usr/lib /usr/local/lib NO_DEFAULT_PATH)
cmake会在目录中查找,如果所有目录中都没有,值RUNTIME_LIB就会被赋为NO_DEFAULT_PATH

LINK_LIBRARIES

语法:

link_libraries(library1 <debug | optimized> library2 ...)  # 必须填库的全名

例子:

link_libraries(“/home/server/third/lib/libcommon.a”)
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(<target> [item1 [item2 [...]]]
                      [[debug|optimized|general] <item>] ...)

例子:

# 以下写法都可以: 
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值