我有一个构建多个库的较低级别的项目。上层获取库并将它们链接到许多可执行文件中。下层有这个选项:
option(TOOLA_SUPPORT "Ena/Disable toolA support" OFF)
我想让上层构建看到TOOLA_SUPPORT
来自下层构建的标志。就像现在一样,有 2 个TOOLA_SUPPORT
标志。一个在下层,另一个在上层构建。这很麻烦,因为它们都需要处于相同的状态才能成功构建。
我不确定如何让一个 CMakeLists.txt 文件从另一个(缓存)继承标志。(只需要这个标志,而不是整个较低的 CMakeLists.txt/cache 设置。)哪些命令可能会有所帮助,或者在哪里查找信息?
Edit_1:(
dirUpper/src/CMakeLists.txt
不包含 dirLower)我希望这个 cmakelists 从dirLower /src/CMakeLists.txt “继承”缓存变量TOOLA_SUPPORT
option(TOOLA_SUPPORT "" OFF)
add_subdirectory(${dirLower}/src ${dirLower}/lib EXCLUDE_FROM_ALL)
if(TOOLA_SUPPORT)
link_directories(blah bla bla)
else()
link_directories(blah bla)
endif()
dirLower/src/CMakeLists.txt
(不是 dirUpper 树的一部分)我想将此 cmakelists 中的 TOOLA_SUPPORT 传递给dirUpper /src/cmakelists.txt
IF(NOT (${COMPILER_FLAGS} MATCHES "-Wall")) #this only applies to dirLower
MESSAGE(FATAL_ERROR "compiler flag not properly set") #will crash the dirUpper 'config'
ENDIF()
OPTION(TOOLA_SUPPORT "" OFF)
IF(TOOLA_SUPPORT)
INCLUDE_DIRECTORIES(some/dir/include)
SET(TOOLA_SUPPORT ON CACHE "" FORCE PARENT_SCOPE)
ELSE()
MESSAGE("TOOLA is not supported")
SET(TOOLA_SUPPORT OFF CACHE "" FORCE PARENT_SCOPE)
ENDIF()
当我运行 dirLower 文件时,我收到一个 cmake 警告,告诉我它没有父级。(不是 dirUpper 树的一部分)
当我运行 dirUpper 文件时,由于 dirLower 文件中的 COMPILER_FLAG 测试,我收到了一个致命错误。当我绕过这个问题时,我没有看到从 dirLower 继承的 TOOLA_SUPPORT 设置。