【问题标题】:Cmake project with multiple directories and multiple CMakeLists具有多个目录和多个 CMakeLists 的 Cmake 项目
【发布时间】:2014-12-08 16:28:59
【问题描述】:

我收到了一些 C++ 源文件,以及一个 CMakeLists.txt 文件,这些文件可以编译以创建一个可执行文件。我现在想将我自己的源文件添加到这个项目中。但是,我想将原始源文件和原始 CMakeLists 文件与新文件分开。

所以,我希望我的解决方案如下所示:

/Project
/Project/src
/Project/src/CMakeLists.txt
/Project/src/OriginalSource
/Project/src/OriginalSource/CMakeLists.txt
/Project/src/OriginalSource/Original.cpp
/Project/src/NewSource
/Project/src/NewSource/CMakeLists.txt
/Project/src/NewSource/New.cpp
/Project/build

我希望将所有源文件编译成可执行文件,然后放置在构建目录中。所以我的问题是,我在三个 CMakeLists 文件中放了什么,这样src/OriginalSource/CMakeLists.txt 只编译原始源,src/NewSource/CMakeLists.txt 只编译新源,src/CMakeLists.txt 将所有这些构建的源链接在一起,并创建一个可执行文件?

【问题讨论】:

  • 你没有项目级别的 CMakeLists.txt 吗?
  • 不,但我可以添加一个(事实上我只是有)!
  • @dresherjm:你应该这样回答;)。这也是我使用的:一个 CMakeLists.txt 并从多个子目录收集源文件。

标签: c++ cmake


【解决方案1】:

您可以从您的代码中创建一个便利库,然后将其链接到您已有的代码。这个想法解释了here

请查看此链接了解更多详情: http://www.cmake.org/Wiki/CMake/Tutorials/Object_Library

希望对你有帮助。

【讨论】:

    【解决方案2】:

    如果不修改其中的CMakeLists.txt,就无法更改OriginSource 中的可执行项目。如果你真的不想修改原来的项目,你可以写一个新的CMakeLists.txt,包括新旧资源。

    一个技巧是在/Project/src/CMakeLists.txt 中定义新的源,然后将它们包含在/Project/src/OriginalSource/CMakeLists.txt 中:

    set(NEW_INCS ${CMAKE_SOURCE_DIR)/NewSource)
    file(GLOB NEW_SRCS ${CMAKE_SOURCE_DIR)/NewSource/*.cpp)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 2016-08-02
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2011-09-15
      • 1970-01-01
      相关资源
      最近更新 更多