使用g++编译多个源目录
Compiling multiple source directories with g++
我的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 autotools
、qmake
和Cmake
等。我强烈建议使用qmake
或Cmake
,因为它们都是跨平台的,而且易于学习。
您的另一个选择是简单地使用IDE!据我所知,Linux上最好的跨平台c++
IDE是Qt Creator
。在后台,它同时支持qmake
和Cmake
项目。
如果您习惯于使用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 Project
和CMakeLists.txt
- 现在,您将被要求选择一个存储结果的路径(以及所有中间文件)
- 命中
Run CMake
- 最后选择
Build -> Build All
祝你好运!
也许,最直接的答案是:
g++ $(find src -name '*.cpp')
也就是说,拥有这么多翻译单元,拥有Makefile有助于在编辑源文件和构建测试时显著减少构建时间。