我的c ++项目具有以下结构
src
|
|source1.cpp
|source2.cpp
|
|<srcfolder1>
|__ source11.cpp
|__ source12.cpp
|
|<srcfolder2>
|__ source21.cpp
|__ source22.cpp
可以看出,有多个文件夹包含多个源文件。 我给g ++什么命令将所有源文件编译成单个.o文件?
答案 0 :(得分:5)
如果你有很多源文件,你应该考虑编写一个Makefile: http://mrbook.org/tutorials/make/
例如,您可以使用与此类似的语法来编译多个文件(在Makefile中):
%.o : $(SRC_FOLDER)/%.cpp
$(CXX) -c -o $@ $<
答案 1 :(得分:2)
您还可以使用可为您生成实际makefile的构建系统。当您尝试扩展项目并维护好 makefile可能会成为一项艰巨的任务时,这一点变得非常重要。我建议你花些时间学习一个。示例包括Scons
,GNU autotools
,qmake
和Cmake
等。我非常谨慎地使用qmake
或Cmake
,因为它们都是跨平台且易于学习的。
您拥有的另一个选择是简单地使用IDE! Linux上我知道并且跨平台的最佳c++
IDE是Qt Creator
。在幕后,它支持qmake
和Cmake
个项目。
答案 2 :(得分:1)
如果您习惯使用Visual Studio并且必须在linux下编译文件,则无需在命令行上开始执行所有操作;)
就像GradGuy指出的那样, QtCreator 是一个很棒的IDE,我也将它用于我的非Windows版本。但是,如果你不做任何GUI的东西,你可能想与cmake
一起使用,因为Qt主要是关于GUI。
cmake
是解决方案文件的生成器(如VS'.sln文件),它独立于您运行的IDE或操作系统。这是一种自下而上的方法,你只需要很少的东西就可以开始。
以下是帮助您入门的一些步骤
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有助于在您编辑源文件并进行测试时大大减少构建时间。