CMake之add_executable
本文使用CMake版本为3.22.1。
add_executable的官方文档:
https://cmake.org/cmake/help/v3.22/command/add_executable.html?highlight=add_execuable
作用
基于特定的源文件,创建可执行文件,名为<name>或者<name>.exe。
语法
创建名为<name>的target,这个target在make的时候会编译为可执行文件。编译的源文件为[source1] [source2]…。根据平台的不同,编译后的可执行文件名可能为<name>.exe或者<name>。
输出路径
关于编译的产物,默认情况下,输出路径和源文件的结构相匹配(例如源文件中CMakeLists.txt在subdir1下,则默认的可执行文件也在编译路径的subdir1下。默认的文件名基于<name>取名。
根目录
例如目录结构为:
其中的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 <target>
来主动执行:
ALIAS
语法为:
用<name>来代替<target>,可以用来做常规操作,但不能通过<name>改变<target>的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:
CMake之add_executable相关推荐
- CMake中add_executable的使用
CMake中的add_executable命令用于使用指定的源文件向项目(project)添加可执行文件,其格式如下: add_executable(<name> [WIN32] [MAC ...
- CMake:add_executable
add_executable(targetName source1 [source2 ...]) 这将创建一个可执行文件,它可以在CMake项目中被称为 targetName .该名称可能包含字母.数 ...
- 使用cmake组建跨平台项目
在开发c++项目时,采用cmake来组建项目十分方便,特别是需要支持跨平台时更是如此,cmake项目可以直接转换为visual studio项目,qt项目,client项目等. 1.cmake项目的核 ...
- cmake使用示例与整理总结
cmake中一些预定义变量 PROJECT_SOURCE_DIR 工程的根目录 PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/bui ...
- Linux——cmake使用示例与整理总结
转自:http://blog.csdn.net/wzzfeitian/article/details/40963457/ cmake中一些预定义变量 PROJECT_SOURCE_DIR 工程的根目录 ...
- MacOS使用conan
conan是跨平台开源的C/C++包管理器,本篇文章介绍如何安装在Mac平台conan搭建C++开发环境.conan是由python编写,在安装conan之前需要提前准备环境. 环境准备 MacOS电 ...
- C语言中pthread或Windows API在多线程编程中的基本应用
文章目录 多线程概述 掌握多线程需要学习什么? 使用pthread.h实现多线程 使用Windows API实现多线程 使用threads.h实现多线程 参考资料 警告 由于我懒得写完,而且懂的也不是 ...
- 安装ceres-solver以及colmap遇到的坑
参考https://blog.csdn.net/Carry_all/article/details/103224043来进行的安装.途中遇到网络问题和make执行错误的问题.错误如下所示: In fi ...
- 古月居ROS入门21讲-坐标系管理
视频链接:bilibili 搜 古月居 源代码:关注古月居公众号,回复ROS入门21讲 文章目录 1 TF坐标变换 1.1 常用工具 2 tf坐标系广播与监听的编程实现 2.1 创建功能包 2.2 创 ...
- QT中为程序加入超级管理员权限
QT中为程序加入超级管理员权限 日期 作者 版本 说明 2022.10.14 Dog Tao V1.0 完成文章的摘录 文章目录 QT中为程序加入超级管理员权限 1. mingw编译器 2. MSVC ...
最新文章
- CSS3 background-size图片自适应
- 学习《apache源代码全景分析》之常用过滤器摘录
- qt打包rpm时候先安装其他软件_云计算学习路线图素材课件,Linux中软件安装的方式...
- java中的集合框架_JAVA中的集合框架(上)List
- 织梦index.php源代码,PHP网站目录程序(织梦 v5.7 二次开发)
- 成立20周年之际 阿里巴巴将发布“新六脉神剑”
- 微课|中学生可以这样学Python(2.3.3节):内置函数zip()
- asp.net实现bt和pt—tracker request
- svn: 无法连接主机“127.0.0.1”: 拒绝连接
- Android Mvp架构详解
- 苹果系统虚拟机无usb服务器,苹果电脑Mac系统中VMware虚拟机无法识别USB Key的解决方法...
- win10系统打不开qq提示错误代码0x00000005怎么办
- 如何找到电脑自带的浏览器
- cαr怎么发音_元音字母
- 地表水水质监测数据/已去重/含坐标
- import java.util.* cannot be resolved或import java.io.*cannot be resolved解决方案
- 汉字区位码查询与算法——microsoft visual studio 2005系列
- 环境配置:前端程序员快速进行开发
- 第十五次ScrumMeeting博客
- 国外程序员推荐的免费编程书籍资源