我的 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 to
pthread_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/