CMake之add

CMake之add,第1张

CMake之add

本文使用CMake版本为3.22.1。

add_executable的官方文档:
https://cmake.org/cmake/help/v3.22/command/add_executable.html?highlight=add_execuable

作用

基于特定的源文件,创建可执行文件,名为或者.exe。

语法


创建名为的target,这个target在make的时候会编译为可执行文件。编译的源文件为[source1] [source2]…。根据平台的不同,编译后的可执行文件名可能为.exe或者

输出路径

关于编译的产物,默认情况下,输出路径和源文件的结构相匹配(例如源文件中CMakeLists.txt在subdir1下,则默认的可执行文件也在编译路径的subdir1下。默认的文件名基于取名。

根目录

例如目录结构为:

其中的CMakeLists.txt内容为:

cmake_minimum_required(VERSION 3.22.1)
project(test-add-executable)
add_executable(${PROJECT_NAME} src/main.cpp)

在build下运行cmake .. ; make,就会在build下生成可执行文件,名称为${PROJECT_NAME}。因为执行的CMakeLists.txt在根目录下,因此可执行文件也默认生成在编译的根目录下(build下):

子目录

如果执行add_executable的CMake是在子目录下,那么默认生成的可执行文件也在相应的子目录内。
现在在src内也放入CMakeLists.txt,并且在其中add exe。

src的CMake:

cmake_minimum_required(VERSION 3.22.1)
project(src)
add_executable(test-add-executable main.cpp)

根目录的CMake:

cmake_minimum_required(VERSION 3.22.1)
project(test-add-executable)
add_subdirectory(src)

在build下cmake .. ; make后,结果为:

默认的可执行文件就在build/src下了。

property RUNTIME_OUTPUT_DIRECTORY

可执行文件的路径和名称可以通过RUNTIME_OUTPUT_DIRECTORY和OUTPUT_NAME两个property来控制。这两个属性默认为空。

message打印的结果为NOTFOUNT:

可以主动设置RUNTIME_OUTPUT_DIRECTORY属性控制输出路径:

set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "abc/")

会自动创建目标目录:

OUTPUT_NAME

也可以设置OUTPUT_NAME控制输出名称:

set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "abcde")

EXCLUDE_FROM_ALL
add_executable(${PROJECT_NAME} EXCLUDE_FROM_ALL src/main.cpp)

当在函数中加入EXCLUDE_FROM_ALL之后,这个target(${PROJECT_NAME})就不会在make的时候做任何 *** 作(因为make只对all target生效)。
make没有任何日志产生:

但是这个target依然存在的,需要make 来主动执行:

ALIAS

语法为:

来代替,可以用来做常规 *** 作,但不能通过改变的property。
通过alias获取property:

cmake_minimum_required(VERSION 3.22.1)

project(test-add-executable)

add_executable(${PROJECT_NAME} EXCLUDE_FROM_ALL src/main.cpp)

set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "abc/")

add_executable(test::add-exe ALIAS ${PROJECT_NAME})
get_target_property(alias_runtime_output_dir test::add-exe RUNTIME_OUTPUT_DIRECTORY)
message("alias_runtime_output_dir:${alias_runtime_output_dir}")

在上面CMake文件中,用test::add-exe来alias原本的exe target,通过alias name来获取源target的property,输出结果:

但不能通过alias name修改源target的property,即alias name相当于只读target。在上面的基础上加上以下命令:

set_target_properties(test::add-exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY "cba/")

会告警,不能对alias target做set property:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711302.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存