我正在使用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
文件放置在Dir1
和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)
将子目录添加为链接到您的主要目标的其他(静态)库。
关于cmake - 如何在另一个文件夹中添加源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609692/