我有一个较低级别的项目,建立了几个库。上层使用库并将它们链接到许多可执行文件中。下层有此选项:上级看到较低级别的选项
option(TOOLA_SUPPORT "Ena/Disable toolA support" OFF)
我想获得上层构建看到从下级构建的TOOLA_SUPPORT
标志。现在,有2 TOOLA_SUPPORT
标志。一个在下层,另一个在上层建立。这是一个麻烦,因为他们都需要处于同一个状态才能成功构建。
我不知道如何让一个CMakeLists.txt文件从另一个缓存(缓存)继承标志。 (只需要这一个标志,而不是整个较低的CMakeLists.txt /缓存设置。)哪些命令可能有所帮助,或者在哪里查找信息?
Edit_1:
dirUpper/src/CMakeLists.txt
(不含dirLower)我想这个cmakelists从dirLower /src/CMakeLists.txt
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
以 “继承” 缓存VAR TOOLA_SUPPORT(不是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设置。
我想你的意思是ADD_SUBDIRECTORY(),因为我找不到任何ADD_DIRECTORY()。上下级cmakelists.txt并不能很好地协同工作。上部cmake在上部范围内运行下部cmakelists。即没有更低的缓存设置正在传递,新的上部变量正在创建W /默认设置。我不想运行较低的cmakelists.txt,只需抓取一个缓存变量设置。那可能吗? – Doug 2013-05-07 15:48:34
通过编辑添加了更多详细信息,并修复了ADD_SUBDIRECTORY()错字,对此感到抱歉。 – Peter 2013-05-07 19:00:56
在上面添加了edit_1。这是我最近的尝试。我试图描述我所看到的。基本上,它没有做我想做的事,并且一路上发出警告。 (这很难描述。)dir-tree问题看起来很重要。建议? (感谢您的时间。) – Doug 2013-05-10 21:59:11