我试图让另一个人的研究代码可以重现,以便其他人不会遇到我现在遇到的同样的问题.但是,我缺乏cmake的经验.这里是阅读文档后,我能做些什么:
在我的同一文件夹CMakeLists.txt我有一个名为io_utils.h具有ROOT_PATH其价值是可变的VALUE_ROOT_PATH.我想用文件的当前目录的值替换该字符串.所以我尝试将以下内容添加到CMakeLists.txt:
# Set ROOT_PATH in io_utils.h
FIND_PATH(BUILD_PATH CMakeLists.txt . )
FILE(READ ${BUILD_PATH}io_utils.h IO_UTILS)
STRING(REGEX REPLACE "VALUE_ROOT_PATH" "${BUILD_PATH}" MOD_IO_UTILS "${IO_UTILS}" )
FILE(WRITE ${BUILD_PATH}io_utils.h "${MOD_IO_UTILS}")
Run Code Online (Sandbox Code Playgroud)
我试图制作并安装它,但它不工作,文件没有改变.我做了什么错了?
小智 11
我建议使用configure_filecmake宏的不同方法.首先,创建一个模板文件,该文件引用您计划在cmake中设置的任何变量,然后宏将实际值替换为变量.例如,假设我们有一个模板文件io_utils.h.in,如下所示:
const char* ROOT_PATH = "${BUILD_PATH}";
Run Code Online (Sandbox Code Playgroud)
在你的CMakeLists.txt,你可以做这样的事情:
configure_file( io_utils.h.in io_utils.h )
Run Code Online (Sandbox Code Playgroud)
当您运行时cmake,它将使用第一个文件作为模板(io_utils.h.in此处)生成第二个文件(io_utils.h此处称为),其值替换为:
const char* ROOT_PATH = "/path/to/CMakeLists.txt";
Run Code Online (Sandbox Code Playgroud)
顺便说一句,CMake有一个内置变量,它引用了CMakeLists.txt被调用的顶级目录CMAKE_SOURCE_DIR.尝试BUILD_PATH使用此变量替换上面的内容
| 归档时间: |
|
| 查看次数: |
6523 次 |
| 最近记录: |