cmake(11):将可执行和库文件分别输出到指定目录

1. 说明

当一个工程编译后包含多个可执行和库文件,将这些文件分别放置在对应的目录里面会使得工程看起来更有序…(当然,这些都是我编的,毕竟要给自己找个理由)

这篇笔记用于记录如何使用cmake在编译后将库文件和可执行文件生成在指定目录。

2. 示例

仍然以之前的代码为例。

在主CMakeLists.txt文件中设置目录路径

# 设置静态库文件目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

# 动态库文件目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

# 可执行文件目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

在各个库代码的子CMakeLists.txt文件中关联目录

link_directories (${CMAKE_LIBRARY_OUTPUT_DIRECTORY})

其实这一步没有必要,因为在编译可执行文件的cmake file里已经添加了target_link_directories()命令了,出于学习目的,这里选择加上。

2.1 变量说明

CMAKE_ARCHIVE_OUTPUT_DIRECTORY
表示将所有的静态库文件放在哪个目录里,这个变量会初始化ARCHIVE_OUTPUT_DIRECTORY属性。

CMAKE_LIBRARY_OUTPUT_DIRECTORY
表示将所有构建的动态库文件放在哪个目录,这个变量会初始化LIBRARY_OUTPUT_DIRECTORY属性。

2.2 link_directories命令解析

这个命令用于将指定目录添加链接器的路径内,既可以是绝对路径也可以是相对路径,这个命令仅对其后生成的目标有效。命令格式如下:

link_directories([AFTER|BEFORE] directory1 [directory2 ...])
  • AFTER|BEFORE:表示指定目录是放在链接器当前路径的前面还是后面,默认是AFTER

注:现在极少使用这个命令,如有必要cmake官方建议使用target_link_directories()命令代替。


3. 将头文件放在同一个目录

这里添加一个在工程中将所有的头文件都放在同一个目录中的用法。(因为这两个内容实在是太少了)

还是以前面的工程为例。

  1. 将math和utility下的两个头文件都放在include目录下
├── include
│   ├── math
│   │   └── add.h
│   └── utility
│       └── utils.h
  1. 在主CMakeLists.txt文件中包含头文件
# include
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/include/math)
include_directories(${PROJECT_SOURCE_DIR}/include/utility)

这里include及其子目录要分别包含。

4. 总结

没有总结,只是我又水了一篇文档。

参考链接

CMake Document

CMake中,你可以使用`CMAKE_RUNTIME_OUTPUT_DIRECTORY`来指定执行文件的生成目录。在主CMakeLists.txt文件中,你可以添加以下代码来设置可执行文件目录: ``` set(CMAKE_RUNTIME_OUTPUT_DIRECTORY <目录路径>) ``` 其中,`<目录路径>`是你想要指定的可执行文件生成目录的路径。\[3\]通过设置`CMAKE_RUNTIME_OUTPUT_DIRECTORY`,你可以将生成的可执行文件放置在指定目录中。 #### 引用[.reference_title] - *1* [cmake 生成可执行程序exe并指定安装目录](https://blog.csdn.net/qq_24423085/article/details/100554072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [cmake设定可执行文件输出目录](https://blog.csdn.net/ly890700/article/details/72808345)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [cmake(11):将可执行文件分别输出指定目录](https://blog.csdn.net/rangfei/article/details/121909285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

翔底

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

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

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

打赏作者

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

抵扣说明:

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

余额充值