我正在尝试用CMake制作一个可执行文件.此可执行文件需要位于项目中的文件的完整路径.
int main()
{
std::ifstream("fullpath_to_file");
//....
}
Run Code Online (Sandbox Code Playgroud)
我认为如果CMake可以用用户指定的字符串替换源代码中的某些符号,则不需要硬编码完整路径.
例如,如果CMake可以将${CMAKE_PROJECT_DIR}
源代码(cpp)替换为cmake的变量,如$ {PROJECT_SOURCE_DIR},那么我就可以像这样编写源代码.
int main()
{
std::ifstream("${CMAKE_PROJECT_DIR}/input/my_input.txt");
//....
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
谢谢.
根据需要向源文件公开尽可能多的CMake变量的好方法是为项目创建配置标头.首先,为标题创建一个模板,称之为config.h.in并定义CMake在构建时设置的符号,例如config.h的内容.在你的情况下可以是
#ifndef __CONFIG_H__
#define __CONFIG_H__
#define PROJECT_DIR @CMAKE_PROJECT_DIR@
#endif
Run Code Online (Sandbox Code Playgroud)
然后在CMakeLists.txt中添加一条指令来更改此配置标头,并将@s之间的值替换为相应的cmake变量的值.例如,将以下内容放在CMakeLists.txt中:
include_directories(${CMAKE_BINARY_DIR})
config_file(
${CMAKE_SOURCE_DIR}/config.h.in
${CMAKE_BINARY_DIR}/config.h
)
Run Code Online (Sandbox Code Playgroud)
然后CMake将创建config.h,其中包含您要从源访问的值的定义.现在您所要做的就是:在您的c ++源代码中包含config.h并按预期使用PROJECT_DIR宏.
归档时间: |
|
查看次数: |
402 次 |
最近记录: |