2016-03-14 27 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)