cmake - 如何在另一个文件夹中添加源文件

标签 cmake

我正在使用cmake在C++中构建我的项目。假设我的“源”文件夹中有以下目录

Source
  |_Dir1
  |   |_Class.cpp
  |   |_Class.hpp
  |
  |_Dir2
      |_Main.cpp

在Dir1中,有一个带有其 header 和实现文件的类(Class.cpp和Class.hpp)。

在Dir2中,有一个主要应用程序使用Dir1中的类

告诉Dir2中的CMakeList用Dir1/Class.cpp文件生成可执行文件的好方法是什么?

编辑:更具体地说,我想定义Class.cpp的源文件必须在Dir1的CMakeLists.txt中使用,而不是在Dir2的中使用。用另一种方式做对我来说显然是错误的,并且很难使用,因此,如果有理由他们强制我这样做,那么对此主题进行一些澄清将是很好的。

我目前正在做的是在Dir2/CMakeLists.txt中对Class.cpp文件位置进行硬编码,但是当我有很多类一起交互时,它只是无法缩放。

最佳答案

假设您在CMakeLists.txt目录中只有一个Source文件,那么您将使用不同的 file() 命令创建两个变量

file(GLOB Dir1_Sources RELATIVE "Dir1" "*.cpp")
file(GLOB Dir2_Sources RELATIVE "Dir2" "*.cpp")

并将file()命令生成的两个集合都添加到目标的源列表中:
add_executable(MyProgram ${Dir1_Sources} ${Dir2_Sources})

或者,您可以将CMakeLists.txt文件放置在Dir1Dir2(主)下,如下所示
Source
    |
    |_ CMakeLists.txt   
    |    > project(MyProgram)
    |    > cmake_minimum_required(VERSION 3.8)
    |    > add_subdirectory("Dir1")
    |    > add_subdirectory("Dir2")
    |
    |_ Dir1   
    |     |_ CMakeLists.txt   
    |         > file(GLOB Sources "*.cpp")
    |         > add_library(Dir1 STATIC ${Sources})
    |_ Dir2   
          |_ CMakeLists.txt   
              > file(GLOB Sources "*.cpp")
              > add_executable(MyProgram ${Sources})
              > target_link_libraries(MyProgram Dir1)

将子目录添加为链接到您的主要目标的其他(静态)库。

关于cmake - 如何在另一个文件夹中添加源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609692/

相关文章:

c++ - 如何在Windows应用程序中使用cmake获得管理员特权?

c++ - 如何将一个 exe 项目链接到另一个 exe 项目中的类

c++ - Windows 上的 CMake

compiler-errors - 安装ccons的CMake错误

c++ - 在 fedora 27 中构建 glfw 时链接期间出错

makefile - CMAKE:构建库并链接到它

cmake - 如何从 CMake 构建目标仅生成目标文件 (*.o)?

c++ - 将多个文件链接到可执行文件

c++ - 使用 Flex 和 Bison 将 Makefile 转换为 CMake

makefile - Cmake:添加子项目添加子文件夹