如何检测当前范围是否在CMake中有父级?

时间:2014-08-08 09:02:22

标签: cmake

有没有办法检测当前范围是否有父级?

我有一个项目可以是独立项目,也可以是另一个项目的子项目。为了允许子项目的情况,我使用PARENT_SCOPE标志set()将事物推送到父项。但是,当构建为独立项目时,我得到“当前范围没有父级”警告。我想通过检测是否存在父级并在if语句中包含set()调用来避免该错误。或者,是否存在另一种在父范围内设置变量的方法?

2 个答案:

答案 0 :(得分:22)

我认为最强大的方法是使用PARENT_DIRECTORY目录属性。

无论是在project命令之前还是之后调用它,无论父项和子项是否都具有相同的项目名称,这都将产生正确的答案。

get_directory_property(hasParent PARENT_DIRECTORY)
if(hasParent)
  message(STATUS "Has a parent scope.")
else()
  message(STATUS "Doesn't have a parent scope.")
endif()

答案 1 :(得分:0)

扩大@ruslo的想法 我不会接受PROJECT_SOURCE_DIR但是CMAKE_PROJECT_NAME变量(包含第一个定义的项目的名称)和PROJECT_NAME(包含当前项目的名称),所以你可以做一些事情在子项目的CMakeLists.txt中这样:

project(bar)

if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
 #do stuff
else()
 #do other stuff
end(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})