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

标签 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: undefined reference to pthread_create' /home/MyProject/main.c:210: undefined reference topthread_join'

它曾经在 .cpp 时工作。在终端中,如果我运行 gcc -pthread main.c vector.c 它编译器没有问题。肯定有一些CMake命令错误,但我不太熟悉它。另外我想我需要删除 -std=c++11

最佳答案

将文件扩展名“main.cpp”更改为“main.c”会向编译器发出信号,表明它处理的不是 C++ 文件,而是 C 文件。

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

您不能只更改文件名并期望这项工作自动完成。这相当于将“myfile.docx”更改为“myfile.pdf”,并认为该文件的内部结构会将其自身从 Micosoft Word 文档重写为 PDF。

关于c++ - 将 main.cpp 更改为 main.c 并停止在 Clion 上使用 CMake 进行构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991121/

相关文章:

c - 为枚举变量分配一个超出枚举范围的值时是否有警告?

c - 为什么 ARM gcc 在函数开始时将寄存器 r3 和 lr 压入堆栈?

c++ - 交叉编译 C++ 程序时权限被拒绝

c++ - GCC 与 Clang : Meaning of "-pedantic-errors"

c - 在未排序的数组中找到差值为输入值 'k' 的一对数字

c++ - 如何使用 doxygen 从 C++ 源代码创建 UML 类图

c++ - 错误 : request for member `member` in `cur` , 是非类类型 node<int>* Binary Tree

C:删除功能会删除所有文件吗?

c++ - 插入 std::map 时的位置

c++ - 将名称转换为数字,然后生成输出