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

时间:2014-09-01 16:14:35

标签: cmake

我正在使用cmake在C ++中构建我的项目。假设我的源文件夹

上有以下目录
Source
  |_Dir1
  |   |_Class.cpp
  |   |_Class.hpp
  |
  |_Dir2
      |_Main.cpp

在Dir1中有一个包含其头文件和实现文件的类(Class.cpp和Class.hpp)。

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

告诉Dir2中的CMakeLists使用Dir1 / Class.cpp文件构建可执行文件的好方法是什么?

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

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

1 个答案:

答案 0 :(得分:15)

假设您在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.txtDir1(主要)下方放置Dir2文件,如下所示

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)

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

相关问题