我有一个项目尝试CMakeLists.txt读取可能存在或不存在的文件。文件丢失不是问题,脚本可以处理这两种情况。如果我们可以检测到已知的 Linux 发行版,这将用于稍微调整编译环境:
file (READ /etc/redhat-release RHREL)
if (RHREL MATCHES "Red Hat Enterprise Linux Server release 6*")
# tweak for RHEL6
elseif (RHREL MATCHES "Red Hat Enterprise Linux Server release 7*")
# tweak for RHEL7
else()
# either read failed, or we didn't match a known RHEL release
# fallback to reasonable defaults
endif()
Run Code Online (Sandbox Code Playgroud)
问题是,当file(READ...)失败时,它似乎使用SEND_ERROR参数输出一条消息。这意味着我的配置按照我的预期继续进行包罗万象else(),但在配置结束时CMake拒绝生成Makefile.
我怎样才能file(READ)以这样的方式运行,以便我可以在本地处理错误并防止它们导致整个配置失败?
将我的评论变成答案
在这种特殊情况下,您还可以检查CMAKE_HOST_SYSTEM.
更一般的答案是,您必须将代码移至外部 CMake 脚本中,并使用全能execute_process()命令调用它:
文件转储RedHatRelease.cmake
file(READ /etc/redhat-release RHREL)
execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${RHREL}")
# or if you don't mind the '-- ' leading dashes with STATUS messages
# (because normal CMake messages go to stderr)
#message(STATUS "${RHREL}")
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt
execute_process(
COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_LIST_DIR}/FileDumpRedHatRelease.cmake"
OUTPUT_VARIABLE RHREL
ERROR_QUIET
)
Run Code Online (Sandbox Code Playgroud)
参考
即使这些参考资料都在讨论可能失败的命令,您也可以在这种情况下看到外部 CMake 脚本add_custom_command()的用法:execute_process()
| 归档时间: |
|
| 查看次数: |
9084 次 |
| 最近记录: |