簡體   English   中英

使用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的構建系統。 當您嘗試擴展項目並保持良好的 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'.sl​​n文件),它獨立於您運行的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有助於在編輯源文件和構建測試時大幅縮短構建時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM