如何在一个文件夹中编译多个文件? [复制]
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)生成项目文件. 非常感谢!!我会试试这个。以上是关于如何在一个文件夹中编译多个文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章