2017-10-14 91 views
0

在設計我CMakeLists,我經常碰到這樣那樣的錯誤:「找不到源文件」:調試其中的cmake找了

Cannot find source file: 

    foo.hpp 

Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp 
.hxx .in .txx 

要調試放入系統的問題,我真的想知道哪裏的CMake找這個文件!

我可以找到一些關於這個問題的SO問題,但它們總是特定於給定的項目,而不是通用調試解決方案。

+0

它總是如此具體,因爲你從字面上必須指定CMake應該在哪裏查找你的源文件。 –

+0

是的,但是必須要有「打印此處查找文件的目錄列表」,以便我可以看到哪個文件丟失了。 – Lithy

回答

0

當傳遞到file.hppadd_executable()命令add_library(),CMake的搜索文件:

  • 電流源目錄(CMAKE_CURRENT_SOURCE_DIR)下,
  • 當前二進制目錄(CMAKE_CURRENT_BINARY_DIR)下。

此外,CMake的是能夠檢測,如果由當前CMakeLists.txt文件add_custom_command()命令的裝置(即,該文件尚不存在,但它會在構建創建生成給定的文件以CMake已知的方式演出)。

+0

例如,在調用'target_link_libraries'時也會發生此錯誤消息,這種情況下,我想它在圖書館指定的某些目錄中查找它,等等。我怎樣才能確定我完成了dirs的完整聆聽?是不是有一些調試標誌cmake得到? – Lithy

+0

如果我確實記得,引用的消息類型不會與'target_link_libraries'發生。通過這個調用,你可能會'找不到-l..'消息,這是由鏈接器在**構建階段**生成的。 – Tsyvarev

+0

上次我碰到這個錯誤,那是因爲我正在鏈接一個接口庫,它的target_source被定義爲一個相對路徑而不是絕對路徑。 「foo.cpp」甚至不在我的add_executable命令中,只存在於庫的CMakeLists中的target_source調用中。 – Lithy