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

时间:2012-03-24 10:55:36

标签: c++ linux gcc compilation g++

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

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

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

4 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

您还可以使用可为您生成实际makefile的构建系统。当您尝试扩展项目并维护 makefile可能会成为一项艰巨的任务时,这一点变得非常重要。我建议你花些时间学习一个。示例包括Scons,GNU autotoolsqmakeCmake等。我非常谨慎地使用qmakeCmake,因为它们都是跨平台且易于学习的。

您拥有的另一个选择是简单地使用IDE! Linux上我知道并且跨平台的最佳c++ IDE是Qt Creator。在幕后,它支持qmakeCmake个项目。

答案 2 :(得分:1)

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

就像GradGuy指出的那样, QtCreator 是一个很棒的IDE,我也将它用于我的非Windows版本。但是,如果你不做任何GUI的东西,你可能想与cmake一起使用,因为Qt主要是关于GUI。

cmake是解决方案文件的生成器(如VS'.sl​​n文件),它独立于您运行的IDE或操作系统。这是一种自下而上的方法,你只需要很少的东西就可以开始。

以下是帮助您入门的一些步骤

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

    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 Project并在您的驱动器上选择CMakeLists.txt

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

祝你好运!

答案 3 :(得分:0)

也许,最直接的答案是这样的:

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

也就是说,拥有如此多的翻译单元,拥有一个Makefile有助于在您编辑源文件并进行测试时大大减少构建时间。