2012-08-03 53 views
36

我試圖在Windows 7 x64上同時運行Visual Studio 2010和Cygwin上的cmake hello world程序,但似乎無法使其工作。我的目錄結構如下:CMake無法使用C++確定鏈接器語言

HelloWorld 
-- CMakeLists.txt 
-- src/ 
-- -- CMakeLists.txt 
-- -- main.cpp 
-- build/ 

我做了cd build後跟一個cmake ..,並得到一個錯誤,指出

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

但是,如果我改變的main.cpp擴展到主。 c在我的電子系統上和在src/CMakeLists.txt中一切都按預期工作。從Visual Studio命令提示符(Visual Studio Solution Generator)和Cygwin Terminal(Unix Makefiles Generator)都運行這種情況。

任何想法爲什麼這段代碼不起作用?

的CMakeLists.txt

PROJECT(HelloWorld C) 
cmake_minimum_required(VERSION 2.8) 

# include the cmake modules directory 
set(CMAKE_MODULE_PATH ${HelloWorld_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) 

add_subdirectory(src) 

的src /的CMakeLists.txt

# Include the directory itself as a path to include directories 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 

# Create a variable called helloworld_SOURCES containing all .cpp files: 
set(HelloWorld_SOURCES main.cpp) 

# Create an executable file called helloworld from sources: 
add_executable(hello ${HelloWorld_SOURCES }) 

的src/main.cpp中

int main() 
{ 
    return 0; 
} 
+0

「[...]如果我更改main.cpp的擴展名[...]」您將其更改爲什麼?名爲.cc? – JAB 2012-08-03 18:21:31

+0

oops。遺漏了這個意外。我將它改爲'.c'。在原文中編輯。它幾乎讓我覺得沒有cpp編譯器或類似的東西,但是g ++被安裝了,Visual Studio也不應該有C++的問題。 – 2012-08-03 18:33:00

回答

23

嘗試改變

PROJECT(HelloWorld C) 

PROJECT(HelloWorld C CXX) 

或只是

PROJECT(HelloWorld) 

參見:http://www.cmake.org/cmake/help/v2.8.8/cmake.html#command:project

+0

這將做到這一點。我知道我在做一些愚蠢的事情。謝謝! – 2012-08-03 19:41:36

+1

這對我沒有幫助。鏈接器錯誤仍然存​​在,請參閱我的答案是否有助於解決此問題。 – Joakim 2013-05-21 11:41:26

72

我也得到了錯誤你提到:

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

在我的情況,這是由於有C++擴展名爲.cc的文件。

如果CMake的是無法確定代碼的語言正確,您可以使用以下方法:

set_target_properties(hello PROPERTIES LINKER_LANGUAGE CXX) 

這表明,附加的語言向project()聲明接受的答案只是增加了更多嚴格的檢查的是什麼語言(根據文檔),但它對我沒有幫助:

(可選)您可以指定項目支持哪種語言。 示例語言爲CXX(即C++),C,Fortran等。默認情況下啓用C 和CXX。例如。如果你沒有C++編譯器,你可以通過明確列出你想要支持的語言 來禁用對它的檢查,例如 。 C.通過使用特殊語言「無」,任何語言的所有檢查 可以被禁用。如果一個名爲 CMAKE_PROJECT__INCLUDE_FILE的變量存在,則該變量指向的文件將作爲項目命令的最後一個步驟包含在內。

22

就我而言,這只是因爲目標中沒有源文件。我的所有庫都是頭文件中包含源代碼的模板。添加一個空file.cpp解決了這個問題。

+4

設置目標屬性也適用於no cpp文件問題。 – 2016-02-26 15:29:14

+0

榮譽提示。我也忘記將我的源文件移動到我新創建的'cmake'項目(共享庫)的相應'src'子目錄中,這基本上是整個問題的原因。在這種情況下,人們真的很感激有一個嚮導來照顧cmake項目的結構。 :D – rbaleksandar 2016-05-27 14:52:00

+0

此處同樣的原因(複製粘貼錯誤)。謝謝! – Vivit 2016-10-28 14:17:00