我有一个包含多个库和可执行文件的 CMake 项目。某些目标具有可能无法在所有平台上都满足的依赖关系。在这种情况下,我希望 CMake 能够工作并生成有意义的 Makefile(或其他构建项目)。
例如:
libFOO
-> 取决于libX11
(比如说)execBAR
-> 取决于libFOO
exexQUUX
-> 没有部门
在安装了 libX11 的系统上,可以构建所有目标。在没有的系统上,只有execQUUX
可用于构建。
目前我正在做这样的事情:
# work out if we can build this target
set(buildLibFOO LibX11_FOUND)
if (${buildLibFOO})
add_library(libFOO ... )
target_link_libraries(libFOO LibX11_LIBRARY)
endif()
set(buildExecBAR true)
# work out if we can build this target
if (NOT TARGET libFOO)
set(buildExecBAR false)
endif()
if (${buildExecBAR})
add_exec(execBAR ...)
target_link_libraries(execBAR libFOO)
endif()
# always build this one
add_exec(execQUUX ...)
但是,这感觉有点笨拙,因为我需要仔细考虑要检查每个目标的内容,而不是对 CMake 说“这些目标需要这些部门,如果缺少,则省略目标”。
有没有更简单(或更正确)的方法来做到这一点?