2012-03-24 77 views
5

我的C++項目具有以下結構相剋編譯多個源目錄++

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

可以看到有多個源文件的多個文件夾。 我給g ++編譯所有源文件到一個.o文件的命令是什麼?

+0

呃,給它所有的源文件? – 2012-03-24 10:56:38

+0

大約有100個源文件。太多,無法在命令行提示符中一一列出 – pdeva 2012-03-24 10:57:22

+4

我認爲複雜項目中的常見方式是在每個子文件夾中都有Makefile,並從父文件夾調用它們。順便說一句,爲什麼你不使用IDE呢? – enobayram 2012-03-24 10:58:26

回答

5

如果你有很多的源文件,你真的應該考慮寫一個Makefile: http://mrbook.org/tutorials/make/

比如,你可以使用類似這樣的語法來編譯多個文件(Makefile文件):

%.o : $(SRC_FOLDER)/%.cpp 
    $(CXX) -c -o [email protected] $< 
+0

羅爾,我的makefile知識現在只是我讀的你鏈接到的那篇文章;)你能解釋一下你描述的命令嗎? %符號代表什麼? – pdeva 2012-03-24 11:08:47

+2

網上必須有更多的教程,它比我在這裏可以解釋的更好地解釋它。基本上上面的內容是:對於SRC_FOLDER中的每個源文件(在別處定義),使用CXX中定義的命令行參數進行編譯,並使用標誌-c -o將它們命名爲與cpp文件相同的名稱,但結尾爲.o 。另請參閱我上面的編輯 – Rolle 2012-03-24 11:26:10

2

您也可以使用可以爲您生成實際生成文件的生成系統。當你嘗試擴展你的項目並且維護一個好的時,這變得很重要makefile可能成爲一項艱鉅的任務。我建議你花一些時間來學習一個。例子是Scons,GNU autotools,qmake和等等。我高度重視使用qmakeCmake,因爲它們都是跨平臺且易於學習的。

您擁有的另一個選擇是簡單地使用IDE!在我所知道的並且是跨平臺的Linux上,最好的c++ IDE是Qt Creator。在引擎蓋下,它支持qmakeCmake項目。

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

祝你好運!