• 欢迎访问GanAHE的小创元世纪,技术交流与资源分享,欢迎加入GanAHE的小创元世纪🤪 微信公众号:星辰换日
  • 电影、教程、软件等分享资源请在本站或微信公众号合作平台:【星辰换日】获取。
  • 首页展示个人参与或独立开发的产品,更多功能在建中......🙆🏼天王盖地虎
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本站吧🥺
  • 注册采用有效的邮箱,有助于及时收到评论回复、最新资源以及活动通知哟~✔🥳
  • 目前在逐渐打通微信小程序与网站之前的间隔~💻🏢

CMake项目下的相对路径问题探索

C/C++ GanAHE 4个月前 (01-24) 10次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

一、背景

利用CMake构建可跨平台的C++项目,需要引入外部的资源文件,需要根据资源文件相对项目的路径进行读取、写入等操作,如Qt项目需要引入图片文件等情况。

此时就涉及相对路径的资源引入问题。

一般而言,依托于项目的资源文件引用,以依赖于项目的相对路径引入为主流,或是再由相对转绝对,实现项目的跨平台应用,而不是开发环境下测试等绝对路径的应用方式。

二、应用场景实例

项目 说明
编译平台 Windows 10
编辑器 Visual Studio 2019
项目类型 CMake项目
项目名称 CMakeLearnCplus

项目结构如下:

├─CMakeLearnCplus
│  ├─.vs
│  │  └─CMakeLearnCplus
│  ├─archive
│  ├─CMakeLearnCplus
│  │  │─sortArray
│  │  └─res.txt
│  ├─executable
│  ├─out
│  │  └─build
│  │      └─x64-Debug (默认值)
│  │          └─Testing
│  │              └─Temporary
│  └─CMakeLists.txt

顶层的CMakeLists.txt配置如下:

# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
# 并包含子项目。
#
cmake_minimum_required (VERSION 3.8)

project ("CMakeLearnCplus")

# 包含子项目。
add_subdirectory ("CMakeLearnCplus")

此时输出的可执行文件的路径为CMakeLearnCplus\out\build\x64-Debug (默认值)\CMakeLearnCplus\CMakeLearnCplus.exe

假设此时需要读取项目CMakeLearnCplus源代码目录下一个res.txt文件,读取的一般路径:

readFile.open("..\\..\\..\\..\\CMakeLearnCplus\\tes.txt",ios::in);

及默认不修改生成的可执行文件路径的话,CMake项目的相对路径引用起点为CMakeLearnCplus\out\build\x64-Debug (默认值)\CMakeLearnCplus\,执行结果:

file

此种方式引用的相对路径太过繁琐。

(一)\resources文件下

通过CMakeLists.txt修改输出的可执行文件路径如下:

# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
# 并包含子项目。
#
cmake_minimum_required (VERSION 3.8)

project ("CMakeLearnCplus")

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/executable)

# 包含子项目。
add_subdirectory ("CMakeLearnCplus")

此时指定相对路径到了CMakeLearnCplus\executable\下。
此时如引用CMakeLearnCplus\resources\下的资源文件,引用的方式如下:

readFile.open("..\\resources\\tes.txt",ios::in);

项目结构如下:

├─CMakeLearnCplus
│  ├─.vs
│  │  └─CMakeLearnCplus
│  ├─archive
│  ├─CMakeLearnCplus
│  │  └─sortArray
│  ├─executable
│  ├─out
│  │  └─build
│  │      └─x64-Debug (默认值)
│  │          └─Testing
│  │              └─Temporary
│  └─resources
│  │  └─res.txt
│  └─CMakeLists.txt

file

(二)存放在executable\resources下

若资源文件存放在指定的输出目录executable下,则引用方式如下:

readFile.open(".\\resources\\tes.txt",ios::in);

项目结构如下:

├─CMakeLearnCplus
│  ├─.vs
│  │  └─CMakeLearnCplus
│  ├─archive
│  ├─CMakeLearnCplus
│  │  └─sortArray
│  ├─executable
│  │  └─res.txt
│  │└─resources
│  ├─out
│  │  └─build
│  │      └─x64-Debug (默认值)
│  │          └─Testing
│  │              └─Temporary
│  └─CMakeLists.txt

file

三、总结

需要指定输出目录作为项目相对路径的起点,指定的方式如下:

  • 修改CMakeLists.txt文件
  • 添加如下代码指定项目的输出目录:
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/executable)

GanAHE 的小创元世纪, 版权所有丨如未注明 , 均为原创丨本网站采用@BY-NC-SA协议进行授权
转载请注明原文链接:CMake项目下的相对路径问题探索
喜欢 (0)
[WeChat]
分享 (0)
关于作者:
网站的建设与维护者、DGZC的守护者
0 0 评分
都看完了,打个分儿叭~
通知
提醒
0 评论
内部反馈
显示所有评论
0
有什么想法吗,快来留下你的评论吧!x
()
x