2016-03-14 57 views
-1

我的CMake的文件包含以下更改的main.cpp到MAIN.C和停止建設與CMake的上克利翁

cmake_minimum_required(VERSION 3.3) 
project(MyProject) 

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin") 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread") 

set(SOURCE_FILES main.c vector.h aLib.h vector.c) 
add_executable(MyProject ${SOURCE_FILES}) 

只要我改變了main.cppmain.c我收到一個錯誤

/home/MyProject/main.c:203:未定義的引用pthread_create' /home/MyProject/main.c:210: undefined reference to在pthread_join'

它用來當它工作是.cpp。在終端,如果我運行gcc -pthread main.c vector.c編譯器沒有問題。必須有一些CMake命令錯誤,但我對它不是很熟悉。另外我想我需要刪除-std=c++11

+0

哦,拜託,爲什麼downvote ???? – G90

+3

我想知道如果將文件重命名爲'.java'或'.py',會發生什麼情況。你期望將一種語言編譯爲不同的語言? – Olaf

回答

3

將文件的擴展名「main.cpp」更改爲「main.c」會告訴編譯器它沒有處理C++文件,而是處理C文件。編譯C與編譯C++不同,所以你需要改變你的編譯規則來匹配,可能你還必須重寫文件中的代碼以符合C標準(C++標準是不同的),而你將您的C啓動程序鏈接到其他C++項目可能會非常困難,所以您可能必須找到替代方案(或者如果您有其源代碼,請重新編寫它們)。

你不能只是改變文件的名稱,並期望這項工作自動完成。這相當於將'myfile.docx'更改爲'myfile.pdf',並且認爲文件的內部部分將自身從Micosoft Word Document重寫爲PDF。

+0

好吧,它用gcc編譯,所以這裏沒有問題。我需要改變哪些CMake規則? – G90

+1

我將首先設置C_FLAGS而不是CXX_FLAGS。您的CMake規則缺少任何指示C編譯器標誌是必需的。 –

+0

刪除XX完成了這項工作。這個規則是默認的。我應該知道其他影響我項目的人嗎? – G90

0

如果你想保持.c擴展但C++編譯器,而不是C編譯器仍然編譯,你也可以使用類似:

set_source_files_properties(main.c 
    PROPERTIES LANGUAGE CXX)