使用g++编译多个源目录

Compiling multiple source directories with g++

本文关键字:g++ 编译 使用      更新时间:2023-10-16

我的c++项目具有以下结构

src
|
|source1.cpp
|source2.cpp
|
|<srcfolder1>
|__ source11.cpp
|__ source12.cpp
|
|<srcfolder2>
|__ source21.cpp
|__ source22.cpp

可以看出,有多个文件夹和多个源文件。我给g++什么命令将所有源文件编译成一个.o文件?

如果你有很多源文件,你真的应该考虑写一个Makefile:http://mrbook.org/tutorials/make/

例如,您可以使用类似的语法来编译多个文件(在Makefile中):

%.o : $(SRC_FOLDER)/%.cpp
  $(CXX) -c -o $@ $<

您还可以使用生成实际makefile的构建系统。当你试图扩展你的项目时,这一点变得很重要,维护一个好的生成文件可能会成为一项艰巨的任务。我建议你花点时间学一个。例如Scons、GNU autotoolsqmakeCmake等。我强烈建议使用qmakeCmake,因为它们都是跨平台的,而且易于学习。

您的另一个选择是简单地使用IDE!据我所知,Linux上最好的跨平台c++ IDE是Qt Creator。在后台,它同时支持qmakeCmake项目。

如果您习惯于使用Visual Studio,并且必须在linux下编译文件,则无需在命令行上开始执行所有操作;)

正如GradGuy所指出的,QtCreator是一个很棒的IDE,我也将其用于非windows构建。但是,如果你不做任何GUI的东西,你可能想把它和cmake一起使用,因为Qt主要是关于GUI的。

cmake是解决方案文件(如VS'sln文件)的生成器,它与运行的IDE或操作系统无关。这是一种自下而上的方法,你只需要很少的时间就可以开始。

以下是让您开始的一些步骤

  • 安装qtcreator和cmake
  • 编写一个文件,告诉cmake源文件在哪里以及在哪里可以找到它们
  • src上方的文件夹中创建一个文件CMakeLists.txt,并在其中写入以下内容:

    project( myProject )
    # set your include directories (if you have any)
    include_directories( include )
    # tell cmake what what are your source files
    set( MY_CPP_FILES 
        src/source1.cpp
        src/source2.cpp
        src/srcfolder1/source11.cpp
        src/srcfolder1/source12.cpp
        src/srcfolder2/source21.cpp
        src/srcfolder2/source22.cpp )
    # if you are creating an executable then do so like this
    # note that ${MY_CPP_FILES} will replace it with its content
    add_executable( myExec ${MY_CPP_FILES} )
    # if you instead want a library, do it like so
    add_library( myStaticLib STATIC ${MY_CPP_FILES} ) # create a static library
    add_library( mySharedLib SHARED ${MY_CPP_FILES} ) # create a shared library
    
  • 现在启动QtCreator并在您的驱动器上选择File -> Open File or ProjectCMakeLists.txt

  • 现在,您将被要求选择一个存储结果的路径(以及所有中间文件)
  • 命中Run CMake
  • 最后选择Build -> Build All

祝你好运!

也许,最直接的答案是:

g++ $(find src -name '*.cpp')

也就是说,拥有这么多翻译单元,拥有Makefile有助于在编辑源文件和构建测试时显著减少构建时间。