我有一个自定义构建命令,需要检查某个文件是否存在。我尝试使用
IF(EXISTS "/the/file")
...
ELSE()
...
ENDIF()
但该测试仅评估一个;当cmake第一次运行时。每次制作完成后我都需要它来执行测试。什么是在制作时检查的方法?感谢。
答案 0 :(得分:10)
您可以使用add_custom_command
使用-P
命令行选项以脚本模式调用CMake本身。
所以你的命令就像:
set(FileToCheck "/the/file")
add_custom_command(TARGET MyExe
POST_BUILD
COMMAND ${CMAKE_COMMAND}
-DFileToCheck=${FileToCheck}
-P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake
COMMENT "Checking if ${FileToCheck} exists...")
和您的脚本文件“check.cmake”类似于:
if(EXISTS ${FileToCheck})
message("${FileToCheck} exists.")
else()
message("${FileToCheck} doesn't exist.")
endif()
答案 1 :(得分:0)
您需要set(FileToCheck "/the/file")
add_custom_command( OUTPUT output.txt
COMMAND test -e output.txt || echo "Do something meaningful"
COMMENT "Checking if ${FileToCheck} exists...")
,但如果您愿意特定于Unix,则可以始终使用test。
xhttp.open("GET", "http://example.com/XML/someXMLfile.xml", true);
答案 2 :(得分:0)
[@Frazers] 如果您需要在 if(EXISTS) 中添加自定义逻辑,答案会很棒。
但是,如果您只需要在缺少单个文件的情况下构建失败,您可以使用 cmake -E
命令行模式将文件与其自身进行比较。
如果提供的文件不存在,这将确保构建总是停止,它是跨平台安全的,并且可以在自 3.0 以来的每个版本的 cmake 中工作。
set(_fileToCheck "foo.txt")
add_custom_command(TARGET YourTarget
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E compare_files ${_fileToCheck} ${_fileToCheck}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Checking if ${_fileToCheck} exists, build will fail if it doesn't"
)