当前位置:  开发笔记 > 编程语言 > 正文

是否可以用CMake将某些符号替换为不同的符号?

如何解决《是否可以用CMake将某些符号替换为不同的符号?》经验,为你挑选了1个好方法。

我正在尝试用CMake制作一个可执行文件.此可执行文件需要位于项目中的文件的完整路径.

int main()
{
    std::ifstream("fullpath_to_file");
    //....
}

我认为如果CMake可以用用户指定的字符串替换源代码中的某些符号,则不需要硬编码完整路径.

例如,如果CMake可以将${CMAKE_PROJECT_DIR}源代码(cpp)替换为cmake的变量,如$ {PROJECT_SOURCE_DIR},那么我就可以像这样编写源代码.

int main()
{
    std::ifstream("${CMAKE_PROJECT_DIR}/input/my_input.txt");
    //....
}

有没有办法做到这一点?

谢谢.



1> Elvis Teixei..:

根据需要向源文件公开尽可能多的CMake变量的好方法是为项目创建配置标头.首先,为标题创建一个模板,称之为config.h.in并定义CMake在构建时设置的符号,例如config.h的内容.在你的情况下可以是

#ifndef __CONFIG_H__
#define __CONFIG_H__

#define PROJECT_DIR @CMAKE_PROJECT_DIR@

#endif

然后在CMakeLists.txt中添加一条指令来更改此配置标头,并将@s之间的值替换为相应的cmake变量的值.例如,将以下内容放在CMakeLists.txt中:

include_directories(${CMAKE_BINARY_DIR})
config_file(
    ${CMAKE_SOURCE_DIR}/config.h.in
    ${CMAKE_BINARY_DIR}/config.h
)

然后CMake将创建config.h,其中包含您要从源访问的值的定义.现在您所要做的就是:在您的c ++源代码中包含config.h并按预期使用PROJECT_DIR宏.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有