Cmakelists以多种语言编译一组文件c ++和c [重复]

Posted

技术标签:

【中文标题】Cmakelists以多种语言编译一组文件c ++和c [重复]【英文标题】:Cmakelists to compile a set of files in multiple languages c++ and c [duplicate] 【发布时间】:2020-04-16 17:46:05 【问题描述】:

我需要编译一组 c++ 和 c 文件。我需要使用 cmakelists.txt 来完成。

我的文件集是: main.cpp

#include "print_test.h"

int main()

 print_test(10);
 return 0;

print_test.c

#include <stdio.h>
void print_test(int a)

printf("%d", a);

print_test.h

void print_test(int a);

使用 g++ main.cpp print_test.c 可以正常编译

但是当我使用下面的 CMakeLists.txt 它给出了链接错误

project(print_test)
cmake_minimum_required (VERSION 2.6) 
add_executable(main main.cpp print_test.c)

错误是

[ 66%] Building C object CMakeFiles/main.dir/print_test.c.o
[ 66%] Building CXX object CMakeFiles/main.dir/main.cpp.o
[100%] Linking CXX executable main
CMakeFiles/main.dir/main.cpp.o: In function `main':
main.cpp:(.text+0xa): undefined reference to `print_test(int)'
collect2: error: ld returned 1 exit status
CMakeFiles/main.dir/build.make:98: recipe for target 'main' failed
make[2]: *** [main] Error 1
CMakeFiles/Makefile2:75: recipe for target 'CMakeFiles/main.dir/all' failed
make[1]: *** [CMakeFiles/main.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

我的问题是如何使用 cmakelists.txt 编译同时使用 c 和 c++ 的文件

【问题讨论】:

问题在于从 C++ 代码中使用 C 函数。此问题在that answer 中对重复问题进行了描述。 【参考方案1】:

据我所知,CMakeLists.txt 没有任何问题。

问题是您在 C++ 翻译单元中调用 C++ 函数,而实际上这种 C++ 并不存在。您的意图大概是调用 C 函数。为了调用 C 函数,您必须适当地声明该函数:

extern "C" 
   void print_test(int a);

【讨论】:

以上是关于Cmakelists以多种语言编译一组文件c ++和c [重复]的主要内容,如果未能解决你的问题,请参考以下文章

opencv学习_C++编译

c语言项目为什么要build?(gccmakefilecmake(qmake)CMakeLists.txt)(qmakecmakeqbs区别解析)

FISCO BCOS源码第三方依赖和模块

更改 CLion 中的默认 CMakeLists.txt 以包含警告

cmake 怎么配置才能生成预编译文件和汇编文件

熟悉 CMake—— 以一个实例说明 CMakeLists txt 文件的编写