Fer*_*eak 56 file cmake file-exists
在我的CMake脚本中,我想看看我的系统上是否有文件,如果有文件,请使用默认文件.这是代码:
find_file(
${project_name}_${customer}_config
${ROOT}/configuration/${customer}/configuration.${project_name}.xml
)
if(NOT ${${project_name}_${customer}_config} STREQUAL
${project_name}_${customer}_config-NOTFOUND )
configure_file(${ROOT}/configuration/${customer}/configuration.${project_name}.xml
${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml)
else()
configure_file(${FAPP_ROOT}/configuration/Default/configuration.${project_name}.xml
${CMAKE_CURRENT_BINARY_DIR}/conf/configuration.xml)
endif()
Run Code Online (Sandbox Code Playgroud)
但似乎这不起作用.
检查CMake中是否存在文件的正确方法是什么?
DLR*_*ave 128
如果您已经知道文件的完整路径名,那么检查文件是否存在的正确方法就是:
if(EXISTS "${ROOT}/configuration/${customer}/configuration.${project_name}.xml")
...
else()
...
endif()
Run Code Online (Sandbox Code Playgroud)
你应该可以使用
if(NOT ${project_name}_${customer}_config)
Run Code Online (Sandbox Code Playgroud)
来自文档:
if(<constant>)如果常量为1,ON,YES,TRUE,Y或非零数字,则为真.如果常量为0,OFF,NO,FALSE,N,IGNORE,""或以后缀'-NOTFOUND'结尾,则返回false.
但是,如果该文件是使用中发现find_file,该值缓存,以及随后的CMake的运行不会尝试再次找到它.要在每次运行时强制重新检查,请在find_file调用之前执行:
unset(${project_name}_${customer}_config CACHE)
Run Code Online (Sandbox Code Playgroud)
我相信这if (EXISTS <path>)是一个很好的解决方案。我想分享一下我最近遇到的一种情况,尽管您在大多数情况下可能都不关心这种情况。
请注意,如果有效用户无法访问该文件,则此解决方案不会返回true。该文件确实存在,但是不可读。
如果您确实关心文件是否确实存在,则此方案的解决方法是调用execute_process(COMMAND ls /dev/fb0 RESULT_VARIABLE result OUTPUT_QUIET ERROR_QUIET),然后检查result如下:
if (result)
message("/dev/fb0 doesn't exist.")
endif()
Run Code Online (Sandbox Code Playgroud)
编辑:添加ERROR_QUIET,execute_process否则文件不存在时,您将从ls收到错误消息。
| 归档时间: |
|
| 查看次数: |
54592 次 |
| 最近记录: |