justdomyself 发表于 2023-9-1 11:14:42

请教一个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怎么写?谢谢大家

justdomyself 发表于 2023-9-1 11:17:58

如果这样写:
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

搞蒙了

airbox 发表于 2023-9-1 11:40:46

你的main内容不是c,是cpp

albert_w 发表于 2023-9-1 12:50:29

既然源码在手不管咋样, 直接都干成cpp就好了.

如果二进制库是纯c, 主程序是cpp, 那就在库文件的头文件extern c, 告诉编译器, 链接的时候这部分按照c的函数规则链接

justdomyself 发表于 2023-9-1 13:14:23

airbox 发表于 2023-9-1 11:40
你的main内容不是c,是cpp
(引用自3楼)

已更正。

main.c是c程序
add.cpp是c++程序。



无论project指定CXX与否,编译都有各种的错误信息。

justdomyself 发表于 2023-9-1 13:15:39

albert_w 发表于 2023-9-1 12:50
既然源码在手不管咋样, 直接都干成cpp就好了.

如果二进制库是纯c, 主程序是cpp, 那就在库文件的头文件exte ...
(引用自4楼)

main.c是c程序。

被调用的其他程序有c也有c++程序。

现在关键是这个cmakelist咋写都不对

jathenal 发表于 2023-9-1 14:19:22

道理我都懂,但add.cpp里提供的为啥是个::sub()函数……

但main()里调用的却又是sum()

而且短短一段话里出现了main.c 和 mian.c

真是要逼死强迫症啊……

justdomyself 发表于 2023-9-1 14:44:02

jathenal 发表于 2023-9-1 14:19
道理我都懂,但add.cpp里提供的为啥是个::sub()函数……

但main()里调用的却又是sum()
(引用自7楼)

{:shy:} 这~~~~~~~~~~~~~~~~~~~~

justdomyself 发表于 2023-9-3 12:27:57

沉底了.。。。。。。。。
页: [1]
查看完整版本: 请教一个c和c++混合编程,cmakelist怎样写的问题