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

标签 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()

目前,CMake 只是避开指令,留下 HAVE_MY_SDKOFF地位。是否可以使用 CMake 检查更高级别的目录?或者也许用间接方法来做

最佳答案

我想你只是缺少一个 /之后 ${PROJECT_SOURCE_DIR} .

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

get_filename_component(_fullpath "${_dir}" REALPATH)
if (EXISTS "${_fullpath}" AND EXISTS "${_fullpath}/CMakeLists.txt")
    ...

在我的扩展 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)

关于CMake - 检查是否存在更高级别的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47674915/

相关文章:

cmake - cmake的选项 "--build"

windows - Windows下使用通过MSYS2安装的cmake 3.5.2, "MinGW Makefiles"生成器丢失

macos - 雪豹上的 cmake 设置

c++ - Mingw32 无法静态链接到 libgcc_s_dw2-1、libstdc++-6、libwinpthread-1 (Qt 5.7.1)

c++ - 用cmake编译iOS动态库(.framework)

c++ - 如何避免使用 CMake FetchContent 进行更新检查?

c++ - 在单独的可执行文件中调用INSTANTIATE_TEST_CASE_P时,库中的TEST_P测试无法运行

caching - CMake 使用命令行覆盖缓存变量

使用 CMake 将具有给定扩展名的所有文件复制到输出目录

c++ - Cmake 找不到 Boost 库