如何使用cmake编译依赖项?

How to compile dependencies using cmake?

鉴于我有以下文件结构,

my_project
    CMakeLists.txt
    /include
        ...headers
    /src
        ...source files
    /vendor
        /third-party-project1
            CMakeLists.txt
        /third-party-project2
            CMakeLists.txt

如何根据我自己的 CMake 文件中的 CMakeLists.txt 文件编译第三方项目来使用它们?我特别需要他们的包含目录,可能还有他们拥有的任何库。

此外,我如何使用FIND_PACKAGE来测试系统中是否安装了第三方项目,如果他们不编译并link针对包含的项目?

要查找项目,您可以使用 find_package() 命令。希望你的第三方项目提供相应的finder模块,否则你应该自己写。然后,您可以在 CMakeLists.txt 中分析 find_package() 的结果,并有条件地使用 add_subdirectory() 深入研究 third-party-projectN/ —— 这将构建该库作为您的包的一部分。要使用他们的 headers 只需添加(有条件地)include_directories(${PROJECT_SOURCE_DIR}/third-party-projectN/include)。他们的图书馆将可以从您的 CMakeLists.txt 作为 "ordinal" 目标访问。

如果您的系统中已经安装了该软件包,查找器模块应该为您提供一些变量以用于 include_directories() and/or target_link_libraries().