cmake配置c++可调用的文件路径参数

本文介绍如何使用CMake自动配置项目中的相对路径,通过设置宏定义简化路径管理,避免因绝对路径引起的跨平台问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、目的

在程序中使用一个路径配置,因为在svn服务器的测试数据,测试数据成为了本地路径,在程序中使用了绝对路径来处理文件的输入,这个令人头疼啊。

每次下完代码,我得挨个地方去找,谁在用本地路径,有点绝对路径为:e:\data\test\1.img.  我只好一个个改动代码,因为我没有E盘啊。

故此,由cmake来实现自动配置一个相对路径,在代码中使用一个宏定义来作为大家的基础路径,这样代码下到本地,编译就可以运行了,

不用再一个个改让人恼火的路径,变量了。

 

二、实现

其实,不难,但是对于新手来说,百度半天,结合其他开源的项目的cmake方法,发现,其他很简单。两句话搞定。

1. 首先,在同级目录的cmake中,添加下面的代码。 

 

SET(RW_DATA_PATH  "${PROJECT_SOURCE_DIR}/data" CACHE PATH "root path")
configure_file (
  "${PROJECT_SOURCE_DIR}/rw_config.h.in"
  "${PROJECT_SOURCE_DIR}/include/rw_config.h"
  )

在cmake工具中就可以查找到当前的路径项目了。

我的路径为:D:/RealWorldBackup/2014-05-08/rw_runtime/,你的是你自己的cmake文件路径下的data文件夹,当然,标出颜色的,就是变量名称,名称在代码中还有用到。

 

 

 

 

2. 接着,我定义了一个头文件,此文件名称为:rw_config.h.in,in结尾,其他还是头文件一个,此文件记得要让cmake能找的到啊,我就放在了当前CMakeLists.txt的同一路径下了。

如下:

#ifndef __rw_config_h__
#define __rw_config_h__
 
#include "rw_types.h"
 
#if defined(WIN32)
#define rw_export __declspec(dllexport)
#define rw_import __declspec(dllimport)
#define rw_local
 
#ifndef __win__
#define __win__
#endif
#else
#define rw_export __attribute__ ((visibility ("default")))
#define rw_import __attribute__ ((visibility ("default")))
#define rw_local  __attribute__ ((visibility ("hidden")))
 
#ifndef __linux__
#define __linux__
#endif
#endif
 
#define rw_api rw_export
 
#define rw_data_path "@RW_DATA_PATH@"
 
#endif


 

3. 说明:

其他都不重要,但是标出颜色的,是个替换过程。你输入的变量RW_DATA_PATHconfigure_file拷贝出一个头文件,名字为rw_config.h过程中,进行替换,替换出来结果为:你在cmke中输入的路径变量。

我把拷贝后的rw_config.h放在了当前目录下的include目录下。内容如下:

 

#ifndef __rw_config_h__
#define __rw_config_h__
 
#include "rw_types.h"
 
#if defined(WIN32)
#define rw_export __declspec(dllexport)
#define rw_import __declspec(dllimport)
#define rw_local
 
#ifndef __win__
#define __win__
#endif
#else
#define rw_export __attribute__ ((visibility ("default")))
#define rw_import __attribute__ ((visibility ("default")))
#define rw_local  __attribute__ ((visibility ("hidden")))
 
#ifndef __linux__
#define __linux__
#endif
#endif
 
#define rw_api rw_export
 
#define rw_data_path "D:/RealWorldBackup/2014-05-08/rw_runtime/data"
 
#endif


 

此时的宏定义为rw_data_path 就是一个字符串的文件路径名称了。

只要包含此头文件,就可以在任何地方使用这个相对路径了。

当然我是把他做了字符串来处理的,你也可以把双引号去掉。反正宏就是赤裸裸的替换,就看你打算干什么了。

 

 这样大家把工程的相对目录给弄对了, 把数据统一的放在某个相对位置,就不用受各种测试,而造成自己很爽,别人恼火的测试数据和测试代码的问题了。


至此,全部搞定了。你可以使用当然变量了,不用再纠结与绝对路径的困扰。

当然你也可以用他完成其他你想要的东西,看你咋想了。

 

Cmake还是挺厉害的。

若有问题,请不吝指教啊!

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值