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

问题描述 投票:0回答:1

我需要编译一组使用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 cmake linker-errors
1个回答
0
投票

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

问题是,当这样的C ++实际上不存在时,您需要在C ++转换单元中调用C ++函数。您的意图可能是调用C函数。为了调用C函数,必须适当地声明该函数:

extern "C" {
   void print_test(int a);
}
© www.soinside.com 2019 - 2024. All rights reserved.