如何让CMakeLists.txt连续构建时无缓存执行指定逻辑?
CMake条件判断依赖缓存的问题及解决
我有一个CMakeLists.txt文件,要求每次运行时根据目标文件是否存在执行不同逻辑,且不依赖CMake缓存。示例代码如下:
set(MY_LIB ${CMAKE_INSTALL_PREFIX}/lib/libmy_lib.so) if (EXISTS ${MY_LIB}) message("External project already compiled, skipping") # do something special here else() # compile an ExternalProject_Add that creates the ${CMAKE_INSTALL_PREFIX}/lib/libmy_lib.so file endif()
首次运行时,libmy_lib.so不存在,会执行ExternalProject_Add编译外部项目;但第二次运行(不清理cmake/CMakeCache.txt)时,本该进入if分支跳过编译,却因为CMake缓存了EXISTS的判断结果,导致无法进入该分支。
我希望仅通过修改CMakeLists.txt实现预期逻辑,无需手动清理缓存或添加额外CMake运行参数。
补充说明:此问题最终确认是由CMake周边的构建工具导致——构建工具未触发CMake重新运行,现已解决!
内容的提问来源于stack exchange,提问作者inspire
相关产品推荐
相关产品推荐

