本文使用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_DIRECTORYOUTPUT_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相关推荐

  1. CMake中add_executable的使用

    CMake中的add_executable命令用于使用指定的源文件向项目(project)添加可执行文件,其格式如下: add_executable(<name> [WIN32] [MAC ...

  2. CMake:add_executable

    add_executable(targetName source1 [source2 ...]) 这将创建一个可执行文件,它可以在CMake项目中被称为 targetName .该名称可能包含字母.数 ...

  3. 使用cmake组建跨平台项目

    在开发c++项目时,采用cmake来组建项目十分方便,特别是需要支持跨平台时更是如此,cmake项目可以直接转换为visual studio项目,qt项目,client项目等. 1.cmake项目的核 ...

  4. cmake使用示例与整理总结

    cmake中一些预定义变量 PROJECT_SOURCE_DIR 工程的根目录 PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/bui ...

  5. Linux——cmake使用示例与整理总结

    转自:http://blog.csdn.net/wzzfeitian/article/details/40963457/ cmake中一些预定义变量 PROJECT_SOURCE_DIR 工程的根目录 ...

  6. MacOS使用conan

    conan是跨平台开源的C/C++包管理器,本篇文章介绍如何安装在Mac平台conan搭建C++开发环境.conan是由python编写,在安装conan之前需要提前准备环境. 环境准备 MacOS电 ...

  7. C语言中pthread或Windows API在多线程编程中的基本应用

    文章目录 多线程概述 掌握多线程需要学习什么? 使用pthread.h实现多线程 使用Windows API实现多线程 使用threads.h实现多线程 参考资料 警告 由于我懒得写完,而且懂的也不是 ...

  8. 安装ceres-solver以及colmap遇到的坑

    参考https://blog.csdn.net/Carry_all/article/details/103224043来进行的安装.途中遇到网络问题和make执行错误的问题.错误如下所示: In fi ...

  9. 古月居ROS入门21讲-坐标系管理

    视频链接:bilibili 搜 古月居 源代码:关注古月居公众号,回复ROS入门21讲 文章目录 1 TF坐标变换 1.1 常用工具 2 tf坐标系广播与监听的编程实现 2.1 创建功能包 2.2 创 ...

  10. QT中为程序加入超级管理员权限

    QT中为程序加入超级管理员权限 日期 作者 版本 说明 2022.10.14 Dog Tao V1.0 完成文章的摘录 文章目录 QT中为程序加入超级管理员权限 1. mingw编译器 2. MSVC ...

最新文章

  1. CSS3 background-size图片自适应
  2. 学习《apache源代码全景分析》之常用过滤器摘录
  3. qt打包rpm时候先安装其他软件_云计算学习路线图素材课件,Linux中软件安装的方式...
  4. java中的集合框架_JAVA中的集合框架(上)List
  5. 织梦index.php源代码,PHP网站目录程序(织梦 v5.7 二次开发)
  6. 成立20周年之际 阿里巴巴将发布“新六脉神剑”
  7. 微课|中学生可以这样学Python(2.3.3节):内置函数zip()
  8. asp.net实现bt和pt—tracker request
  9. svn: 无法连接主机“127.0.0.1”: 拒绝连接
  10. Android Mvp架构详解
  11. 苹果系统虚拟机无usb服务器,苹果电脑Mac系统中VMware虚拟机无法识别USB Key的解决方法...
  12. win10系统打不开qq提示错误代码0x00000005怎么办
  13. 如何找到电脑自带的浏览器
  14. cαr怎么发音_元音字母
  15. 地表水水质监测数据/已去重/含坐标
  16. import java.util.* cannot be resolved或import java.io.*cannot be resolved解决方案
  17. 汉字区位码查询与算法——microsoft visual studio 2005系列
  18. 环境配置:前端程序员快速进行开发
  19. 第十五次ScrumMeeting博客
  20. 国外程序员推荐的免费编程书籍资源

热门文章

  1. JOB DESCRIPTION
  2. SqlServer 查询一段时间,没有数据自动补充0
  3. Apache 服务器特点
  4. 《私募股权基金投资基础知识》---第三章
  5. matlab正弦信号频谱,正弦信号的正弦信号的频谱分析及提取.doc
  6. 怎么合并mp3音频文件?
  7. Spring数据绑定之DataBinder篇---01
  8. 【Java】俄罗斯方块带背景音乐
  9. PowerDesigner破解版下载及安装教程
  10. DDD 领域事件设计(基于Guava EventBus二次封装)