如何在一个文件夹中编译多个文件? [复制]

Posted

技术标签:

【中文标题】如何在一个文件夹中编译多个文件? [复制]【英文标题】:how would I compile multiple files in a folder? [duplicate] 【发布时间】:2021-05-03 16:24:35 【问题描述】:

所以,我决定用 C++ 完全编写我的游戏(回合制 RPG)。

我在 youtube 上看到其他人创建了一个包含不同 cpp 文件的文件夹,然后他们以某种方式编译了所有文件。

我的问题是,如何在一个文件夹中编译多个文件?

如果需要,我正在使用 MSYS。

【问题讨论】:

你的操作系统是什么? g++ file1.cpp file2.cpp file3.cpp -o game.exe。 AFAIK PowerShell 支持 glob:g++ *.cpp -o game.exe 也应该可以工作。 您可能有兴趣阅读:How does the compilation/linking process work? 这能回答你的问题吗? C++ - Compiling multiple files 【参考方案1】:

使用 cmake

您可以编写一个makefile,它将所有要编译的文件包含在一个文件夹中,或者为了更好的管理,您可以使用cmake将所有文件编译到一个库中并再次使用它们。通过使用 cmake,您可以有效地维护和构建庞大的代码库。

比方说,你的 Main 目录有 main.cpp 文件,里面有一个 src 文件夹,里面有所有其他要编译的文件,

然后你可以创建一个CMakeLists.txt文件,内容如下

set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -O2 -std=c++14 ")
add_subdirectory(src)
add_executable(main main.cpp)
target_link_libraries(main compiledLibrariesfrmSrcFolder)

然后在您的src 目录中导航以创建另一个 CMakeLists.txt。这将控制您需要编译并添加到主程序的所有文件。

add_library(compiledLibrariesfrmSrcFolder STATIC
a.cpp
b.cpp
c.cpp
d.cpp)

否则,您还可以使用GLOB_RECURSE 将所有 .cpp 文件添加到该子目录中

完成后,您可以在主目录中创建一个新文件夹并运行以下命令 mkdir build

cd build
cmake ../
make 

这会编译并在 build 文件夹中生成您的可执行文件。

注意:只是为了详细说明,在构建中执行此操作的主要原因是因为 cmake 在此过程中创建了许多临时文件,为了将它们与您的主代码隔离,您将在构建目录中进行构建。

cmake ../ ,这里 cmake 接受一个参数,该参数是主 CMakeLists.txt 文件的位置。在我们的例子中,它将是构建之前的目录。这将创建 MakeFile,其中包含编译和链接所有其他必要文件的指令。

make 编译和链接文件并生成可执行文件。

【讨论】:

如果您要与他人共享源代码,CMake 也将有很大帮助,因为除了生成 Makefile 之外,您还可以为其他编译器(如 mscv / Visual Studio 或 XCode 或 qt-creator 等 IDE)生成项目文件. 非常感谢!!我会试试这个。

以上是关于如何在一个文件夹中编译多个文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在编译设置时创建多个 zip 存档

如何在一个java文件中编译多个类[重复]

如何在linux终端上替换多个文件中的一行? [复制]

如何在单个命令中编译多个 proto 文件?

如何在OCaml中编译多个文件?

如何在 Express 的多个文件中包含路由处理程序? [复制]