2014-07-10 109 views
0

在我的項目的主文件夾,我有一個的CMakeLists.txt文件。在這個文件中,我包含了(使用add_subdirectory)位於我的頭文件目錄中的另一個CMakeLists.txt文件。第二個文件的責任,是我所有的頭文件添加到項目:「無法確定目標鏈接的語言......」問題子目錄

file(GLOB gl_nbody_HEADERS "*.h") 

add_executable(gl_nbody ${gl_nbody_HEADERS}) 

然而,這個文件將導致錯誤:

CMake Error: CMake can not determine linker language for target:gl_nbody 
CMake Error: Cannot determine link language for target "gl_nbody". 

奇怪的是,當我有兩個在我的主CMakeLists.txt文件(修改爲在目錄中更改正常工作)導致此錯誤的行,它工作正常。

這裏怎麼回事?

回答

1

add_executable導致可執行目標的建立,意味着源代碼文件列表的彙編成可執行的二進制文件。

爲了這個工作,並且有CMake的選擇合適的編譯器,源文件的列表中必須包含有「編譯」延伸,即至少一個文件。 .C,或的.cpp或.CXX ....

我不明白你爲什麼要試圖在這裏編譯可執行文件,因爲你似乎只是嘗試列出的頭文件包括到一個項目(只對基於IDE的生成器(如Visual Studio)有意義)。

另外,不建議使用的文件的通配在CMake的,因爲如果添加多個文件到您的項目,CMake的不能自動檢測到它們,並不會重新建立文件。請明確列出所有文件。

這裏的妥善解決是列出在適當add_executable命令調用,你列出你要編譯的實際源文件的頭文件。

您可能還需要使用source_group()命令,即允許您將文件轉換爲在生成的Visual Studio解決方案文件夾,例如:

source_group(header_files ${gl_nbody_HEADERS})