CMake中如何仅在文件不存在时执行configure_file?
解决configure_file仅在目标文件不存在时生成的问题
CMake自带的configure_file默认会在每次构建时检查源模板文件的变化,自动更新目标文件——哪怕用户已经手动修改过目标文件,这显然不符合你的需求。要实现仅当目标文件不存在时才生成,存在则完全不触碰的效果,可以用条件判断结合configure_file来实现:
- 在你的CMakeLists.txt里加入以下逻辑:
# 先定义源模板文件和目标文件的路径 set(SOURCE_TEMPLATE "${CMAKE_SOURCE_DIR}/your_template.h.in") set(TARGET_FILE "${CMAKE_BINARY_DIR}/your_target.h") # 只有目标文件不存在时,才执行生成操作 if(NOT EXISTS "${TARGET_FILE}") configure_file("${SOURCE_TEMPLATE}" "${TARGET_FILE}" @ONLY) endif()
逻辑说明
if(NOT EXISTS "${TARGET_FILE}")会先检查目标文件的存在性:
- 如果目标文件还没创建,就调用
configure_file从模板生成它; - 如果目标文件已经存在(不管是之前生成的还是用户手动修改的),直接跳过生成步骤,完全保留现有文件内容。
如果之后需要重新生成目标文件,只需要手动删除已存在的目标文件,再重新运行CMake构建即可。
内容的提问来源于stack exchange,提问作者unalignedmemoryaccess
相关产品推荐
相关产品推荐

