请教一个c和c++混合编程,cmakelist怎样写的问题
本帖最后由 justdomyself 于 2023-9-1 15:16 编辑程序结构模型大致如下:
main.c 程序调用了add.cpp程序中的sub函数。
main.c内容如下:
#include "add.h"
int main()
{
int c = 10;
printf("%d\r\n", sum(1,2));
return 0;
}
add.cpp 内容如下:
#include "add.h"
#include <iostream>
int test::sub(int a, int b)
{
return a-b;
}
在代码不改变的情况下,cmake怎么写?谢谢大家 如果这样写:
cmake_minimum_required(VERSION 3.5)
project(cpptest)
aux_source_directory(./ SRC)
add_executable(cpptest ${SRC} )
就提示:
/home/alientek/Desktop/cmake/CPP_TEST/main.c:1:10: fatal error: iostream: No such file or directory
1 | #include <iostream>
| ^~~~~~~~~~
compilation terminated.
make: *** Error 1
make: *** Error 2
make: *** Error 2
如果这样写:
cmake_minimum_required(VERSION 3.5)
project(cpptestCXX)
aux_source_directory(./ SRC)
add_executable(cpptest ${SRC} )
就提示:
opt/fsl-imx-xwayland/5.4-zeus/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/9.2.0/real-ld: /opt/fsl-imx-xwayland/5.4-zeus/sysroots/aarch64-poky-linux/usr/lib/Scrt1.o: in function `_start':
/usr/src/debug/glibc/2.30-r0/git/csu/../sysdeps/aarch64/start.S:67: undefined reference to `main'
/opt/fsl-imx-xwayland/5.4-zeus/sysroots/x86_64-pokysdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/9.2.0/real-ld: /usr/src/debug/glibc/2.30-r0/git/csu/../sysdeps/aarch64/start.S:68: undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** Error 1
make: *** Error 2
make: *** Error 2
搞蒙了
你的main内容不是c,是cpp 既然源码在手不管咋样, 直接都干成cpp就好了.
如果二进制库是纯c, 主程序是cpp, 那就在库文件的头文件extern c, 告诉编译器, 链接的时候这部分按照c的函数规则链接 airbox 发表于 2023-9-1 11:40
你的main内容不是c,是cpp
(引用自3楼)
已更正。
main.c是c程序
add.cpp是c++程序。
无论project指定CXX与否,编译都有各种的错误信息。 albert_w 发表于 2023-9-1 12:50
既然源码在手不管咋样, 直接都干成cpp就好了.
如果二进制库是纯c, 主程序是cpp, 那就在库文件的头文件exte ...
(引用自4楼)
main.c是c程序。
被调用的其他程序有c也有c++程序。
现在关键是这个cmakelist咋写都不对 道理我都懂,但add.cpp里提供的为啥是个::sub()函数……
但main()里调用的却又是sum()
而且短短一段话里出现了main.c 和 mian.c
真是要逼死强迫症啊……
jathenal 发表于 2023-9-1 14:19
道理我都懂,但add.cpp里提供的为啥是个::sub()函数……
但main()里调用的却又是sum()
(引用自7楼)
{:shy:} 这~~~~~~~~~~~~~~~~~~~~ 沉底了.。。。。。。。。
页:
[1]