将main.cpp更改为main.c并停止在Clion上使用CMake进行构建

时间:2016-03-14 15:06:43

标签: c++ c gcc cmake

我的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.cpp更改为main.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

2 个答案:

答案 0 :(得分:3)

更改文件的扩展程序" main.cpp" to" main.c"向编译器发出信号,表明它不处理C ++文件,而是处理C文件。

编译C与编译C ++不同,因此您需要更改构建规则以匹配,可能您还必须重写文件中的代码以符合C标准(C ++标准不同),并且您将可能很难将C启动器链接到其他C ++项目,因此您可能必须找到替代方案(或者如果您有源代码则重写它们)。

您无法更改文件的名称,并希望自动完成此项工作。这相当于更改了一个&my; .docx'到了'myfile.pdf'并且认为文件的内部将自己重写为Micosoft Word文档到PDF。

答案 1 :(得分:0)

如果你想保留.c扩展名但仍然用C ++编译器而不是C编译器编译,你也可以使用类似的东西:

set_source_files_properties(main.c 
  PROPERTIES LANGUAGE CXX)