具有多个目录和多个 CMakeList 的 Cmake 项目

Cmake project with multiple directories and multiple CMakeLists

本文关键字:Cmake 项目 CMakeList      更新时间:2023-10-16

我得到了一些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所有这些构建的源代码链接在一起,并创建一个可执行文件?

你可以用你的代码创建一个方便的库,然后将其链接到你已经得到的代码。这里解释了这个想法。

有关更多详细信息,请参阅此链接:http://www.cmake.org/Wiki/CMake/Tutorials/Object_Library

我希望它有所帮助。

如果不修改OriginSource中的CMakeLists.txt,就无法更改可执行项目。如果你真的不想修改原始项目,你可以写一个新的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)