CMake - 检查是否存在更高级别的目录

Jon*_*man 5 cmake

我是 CMake 的新手,我尝试在我的根 CMakeLists.txt 中执行此操作:

set(HAVE_MY_SDK   OFF)

if(IS_DIRECTORY "${PROJECT_SOURCE_DIR}../Libs/A")
    if(EXISTS "${PROJECT_SOURCE_DIR}../Libs/A/CMakeLists.txt")
        set (HAVE_MY_SDK   ON)
    endif()
endif()
Run Code Online (Sandbox Code Playgroud)

目前,CMake的只是避免指令,留下HAVE_MY_SDK一个OFF状态。是否可以使用 CMake 检查更高级别的目录?或者也许用间接方法来做

Flo*_*ian 7

我认为你只是缺少一个/after ${PROJECT_SOURCE_DIR}

出于完整性,这里是我为此使用的代码(请注意,if (EXISTS ...)需要完整路径):

get_filename_component(_fullpath "${_dir}" REALPATH)
if (EXISTS "${_fullpath}" AND EXISTS "${_fullpath}/CMakeLists.txt")
    ...
Run Code Online (Sandbox Code Playgroud)

在我的扩展add_subdirectory()版本中(包括“添加一次保护”):

function(my_add_subdirectory _dir)
    get_filename_component(_fullpath "${_dir}" REALPATH)
    if (EXISTS "${_fullpath}" AND EXISTS "${_fullpath}/CMakeLists.txt")
        get_property(_included_dirs GLOBAL PROPERTY GlobalAddSubdirectoryOnceIncluded)
        list(FIND _included_dirs "${_fullpath}" _used_index)
        if (${_used_index} EQUAL -1)
            set_property(GLOBAL APPEND PROPERTY GlobalAddSubdirectoryOnceIncluded "${_fullpath}")
            add_subdirectory(${_dir} ${ARGN})
        endif()
    else()
        message(WARNING "my_add_subdirectory: Can't find ${_fullpath}/CMakeLists.txt")
    endif()
endfunction(my_add_subdirectory)
Run Code Online (Sandbox Code Playgroud)