Cmake使用笔记,Cmakelist编写

1.常用命令

project(<PROJECT-NAME> [LANGUAGES] [<language-name>...])

将Name存到PROJECT_NAME,同时设置变量

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

指定头文件的搜索路径,相当于指定gcc的-I参数 
INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/Hello) #增加Hello为include目录

target_link_libraries(<target> ... <item>... ...)

添加链接库,相同于指定-l参数 TARGET_LINK_LIBRARIES(demo Hello) #将可执行文件与Hello连接成最终文件demo

link_directories(directory1 directory2 ...)


动态链接库或静态链接库的搜索路径,相当于gcc的-L参数 
LINK_DIRECTORIES(${HELLO_BINARY_DIR}/Hello)#增加Hello为link目录

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [source1] [source2 ...])

ADD_LIBRARY(Hellohello.cxx) #将hello.cxx编译成静态库如libHello.a

add_executable(<name> [WIN32] [MACOSX_BUNDLE]
               [EXCLUDE_FROM_ALL]
               [source1] [source2 ...])

ADD_EXECUTABLE(helloDemo demo.cxx demo_b.cxx) 指定编译,好像也可以添加.o文件,将cxx编译成可执行文件

add_subdirectory(source_dir [binary_dir]
                 [EXCLUDE_FROM_ALL])

ADD_SUBDIRECTORY(Hello) #包含子目录

aux_source_directory(<dir> <variable>)

基本语法是:AUX_SOURCE_DIRECTORY(dir VARIABLE),作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表,因为目前cmake还不能自动发现新添加的源文件。比如:

  • 1 AUX_SOURCE_DIRECTORY(. SRC_LIST)
  • 2 ADD_EXECUTABLE(main ${SRC_LIST})

可以通过后面提到的FOR EACH指令来处理这个LIST。

cmake_minimum_required(VERSION <min>[...<max>] [FATAL_ERROR])

比如:CMAKE_MINIMUM_REQUIRED(VERSION 2.5 FATAL_ERROR) 
如果cmake版本小与2.5,则出现严重错误,整个过程中止。

 

2.(转)常用变量

CMAKE_BINARY_DIR 
PROJECT_BINARY_DIR 
< projectname >_BINARY_DIR 
这三个变量指代的内容是一致的,如果是in-source编译,指得就是工程顶层目录;如果是out-of-source编译,指的是工程编译发生的目录。PROJECT_BINARY_DIR跟其它指令稍有区别,目前可以认为它们是一致的。

CMAKE_SOURCE_DIR 
PROJECT_SOURCE_DIR 
< projectname >_SOURCE_DIR 
这三个变量指代的内容是一致的,不论采用何种编译方式,都是工程顶层目录。也就是在in-source编译时,他跟CMAKE_BINARY_DIR等变量一致。PROJECT_SOURCE_DIR跟其它指令稍有区别,目前可以认为它们是一致的。 
(out-of-source build与in-source build相对,指是否在CMakeLists.txt所在目录进行编译。)

CMAKE_CURRENT_SOURCE_DIR 
当前处理的CMakeLists.txt所在的路径,比如上面我们提到的src子目录。

CMAKE_CURRRENT_BINARY_DIR 
如果是in-source编译,它跟CMAKE_CURRENT_SOURCE_DIR一致;如果是out-of-source编译,指的是target编译目录。使用ADD_SUBDIRECTORY(src bin)可以更改这个变量的值。使用SET(EXECUTABLE_OUTPUT_PATH <新路径>)并不会对这个变量造成影响,它仅仅修改了最终目标文件存放的路径。

CMAKE_CURRENT_LIST_FILE 
输出调用这个变量的CMakeLists.txt的完整路径

CMAKE_CURRENT_LIST_LINE 
输出这个变量所在的行

CMAKE_MODULE_PATH 
这个变量用来定义自己的cmake模块所在的路径。如果工程比较复杂,有可能会自己编写一些cmake模块,这些cmake模块是随工程发布的,为了让cmake在处理CMakeLists.txt时找到这些模块,你需要通过SET指令将cmake模块路径设置一下。比如SET(CMAKE_MODULE_PATH,${PROJECT_SOURCE_DIR}/cmake) 
这时候就可以通过INCLUDE指令来调用自己的模块了。

EXECUTABLE_OUTPUT_PATH 
新定义最终结果的存放目录

LIBRARY_OUTPUT_PATH 
新定义最终结果的存放目录

PROJECT_NAME 
返回通过PROJECT指令定义的项目名称。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blanklog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值