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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
c语言项目为什么要build?(gccmakefilecmake(qmake)CMakeLists.txt)(qmakecmakeqbs区别解析)