我正在使用CMake从存在于指定位置的文件中自动创建文件。这是我的代码:
file(GLOB files "${path}/*.data")
file(GLOB sidedata "${path}/*.sidedata")
foreach(file ${files})
get_filename_component(name ${file} NAME_WE)
add_custom_command(
OUTPUT "${name}.library"
DEPENDS ${path} ${file} ${sidedata} ${CMAKE_CURRENT_SOURCE_DIR}/makelibrary.pl
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/makelibrary.pl ARGS ${sidedata} ${file}
COMMENT "Generating ${name}.library"
)
add_custom_target(${name}.target ALL DEPENDS ${name}.library)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.library DESTINATION ${somewhere})
endforeach()
我看到files
和sidedata
被缓存的问题 - 如果将新文件添加到path
位置,则无法检测到该问题;如果删除了文件,则依赖性检查将失败。
如何解决此问题?
答案 0 :(得分:1)
为了结束这个问题,我遵循了弗雷泽的建议:重新运行普通cmake <source area>
来更新文件列表。
此外,变量不在缓存中。
答案 1 :(得分:0)
我正在使用像这样的模块CheckCXXSourceRuns
include(CheckCXXSourceRuns)
check_cxx_source_runs("
#include ...
int main() {
...
}" HAVE_AVX_EXTENSIONS)
要强制CMake在每次调用cmake ..
时重新评估此值,我都会调用cmake .. -U HAVE_\*
。这将取消定义HAVE_
变量,以便CMake必须重新评估它们。
来源:https://blogs.kde.org/2011/02/05/how-selectively-remove-entries-cmake-cache-command-line