【问题标题】:Reading variables into cmake from another CMakeLists.txt从另一个 CMakeLists.txt 将变量读入 cmake
【发布时间】:2015-01-07 11:52:56
【问题描述】:

使用UbuntuC++cmake,我想创建一个程序Alpha,它基于另一个程序Beta 的代码。我已经有了Beta 的源代码,我需要为Alpha 编写使用这个现有代码的代码。我试图保持一切整洁,所以我为AlphaBeta 源文件、Alpha.cppBeta.cpp 设置了一个单独的目录。

这是我的目录结构:

/CMakeLists.txt
/Alpha.cpp (the main function)
/Beta
    /CMakeLists.txt
    /Beta.cpp

AlphaCMakeLists.txt 文件如下所示:

cmake_minimum_required(VERSION 2.8)
project(Alpha)
add_executable(Alpha Alpha.cpp Beta/Beta.cpp)

现在,在Beta 的原始代码中,CMakeLists.txt 文件有很多信息,例如检查操作系统、查找包以及通常定义各种 cmake 变量。我需要在AlphaCMakeLists.txt 文件中使用这些变量,以便正确编译Beta.cpp

所以,我的问题是:是否可以在Beta/CmakeLists.txt 中保留所有这些信息,而不必将其全部写在AlphaCMakeLists.txt 文件中?然后我如何告诉AlphaCMakeLists.txt 文件读取BetaCMakeLists.txt 文件以获取这些变量?我想这样做是为了保持一切整洁,并保持模块化。谢谢!

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    CMake 有一个include 构造,可以让你拉入其他文件/模块。 http://www.cmake.org/cmake/help/v3.0/command/include.html

    因此,您可以将 Beta/CMakeLists.txt 中所需的任何内容分离到另一个名为 Beta.cmake 的文件/模块中,并将其包含在带有 include (Beta/Beta.cmake) 的 Alpha 的 CMakeLists 中。

    所以你的目录结构是

    /CMakeLists.txt
    /Alpha.cpp (the main function)
    /Beta
        /CMakeLists.txt
        /Beta.cmake (variables required in Alpha's CMake)
        /Beta.cpp
    

    还有 Alpha 的 CMakeList.txt

    cmake_minimum_required(VERSION 2.8)
    project(Alpha)
    include(Beta/Beta.cmake) (get variables needed from Beta)
    add_executable(Alpha Alpha.cpp Beta/Beta.cpp)
    

    另见How to include an additional CMakeLists.txt

    【讨论】:

    • 谢谢。在您的示例中,如果 Beta/CMakeLists.txt 的所有变量现在都在 Beta/Beta.cmake 中,为什么我还需要它?
    • 另外,Alpha 的 CMakeList.txt 中的第三行不是include(Beta/Beta.cmake)吗?
    • 您是否要包含所有Beta/CMakeLists.txt 取决于您需要多少信息用于Alpha 的CMakeLists.txt。这个想法是提取两者都需要的共同项目并放入一个单独的文件中并包含它们。
    • 是的,CMake 应该能够通过指定指定 CMAKE_MODULE_PATH 的路径找到 Beta.cmake。我已经修正了错字。
    • 谢谢。但是 Beta 的 CmakeList 中还剩下什么?最初编译 Beta 所需的变量现在位于 Beta.cmake 中,唯一的其他命令是那些与创建 Beta 可执行文件有关的命令,例如 add_executable(Beta Beta.cpp)。我不再在 Beta 文件夹中创建可执行文件,只是使用其中的源代码和 cmake 变量来制作 Alpha 可执行文件。您能否举例说明 Beta 版的 CMakeList 中可能还需要哪些内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    相关资源
    最近更新 更多