2011-03-24 34 views
2

我很抱歉,如果這已被回答,我搜索了一段時間,找不到直接的答案。Cmake如何使頭文件自動包括他們的源文件

我已經習慣了windows visual C++,其中我使用頭文件(*.h)來聲明類,它是函數和源文件(*.cpp),其中實際類的函數被詳細編碼。我現在在使用Kdevelop的Linux下工作,它使用cmake。我創建了一些帶有類的頭文件並聲明瞭它們的函數,然後將這些函數編碼到它們各自的源文件中。每次嘗試構建時,都會收到錯誤消息,說明Class::function()是未定義的參考。如果我在頭文件中添加實際的功能,建築工作正常。所以我假設cmake沒有正確鏈接頭文件的相應源文件。我假設這會自動發生,但我現在猜測事實並非如此。我怎樣才能做到這一點?對於我創建的每個頭文件,使用源文件的完全相同的名稱,將它鏈接並構建?

如果已經回答了這個問題,請發佈一個鏈接,如果沒有,我會喜歡簡單的解釋。我知道有很多方法可以做到這一點(autoconf,make dep等),但現在我堅持使用cmake

回答

2

下面是一個名爲Test的項目的示例CMakeLists.txt,它將兩個源文件鏈接到名爲test的可執行文件中。

cmake_minimum_required(VERSION 2.6) 
project(Test) 
add_executable(test test.cpp testlib.cpp) 

如果你想添加更多的源文件,只需將它們添加到列表中。

+0

謝謝你的工作,但我想沒有辦法自動執行此任何新添加的foo.h&foo.cpp對? – 2011-03-24 01:39:51

+0

@亞歷克斯:記得接受答案。 – 2011-03-24 05:07:12

+0

有兩種方法可以完成。推薦的方法是讓KDevelop將文件添加到源列表中,如上所示。在技​​術上也可以使用文件(GLOB source_list * .cpp)等cmake命令來生成目錄中的源代碼列表。但是,我只是提到這是說這是一個壞主意。如果你這樣做,你必須記住每次添加一個文件時要將整個構建目錄全部刪除,因爲cmake將無法判斷是否添加了新文件。 – ltc 2011-03-24 07:16:40

1

在C++中,僅僅存在.cpp文件並不一定意味着它將在您構建它時鏈接到您的項目中。當您在Visual Studio中創建新的.cpp文件時,VS會自動將.cpp文件添加到您的項目中,因此您不必考慮它。

當使用不牽手的工具時,您必須手動添加相關的.cpp文件到您的項目文件中。請參閱CMake文檔瞭解如何做到這一點。它看起來像CMake Tutorial可能在這裏的幫助。