搜索
bottom↓
回复: 8

请教一个c和c++混合编程,cmakelist怎样写的问题

[复制链接]

出0入8汤圆

发表于 2023-9-1 11:14:42 | 显示全部楼层 |阅读模式
本帖最后由 justdomyself 于 2023-9-1 15:16 编辑

程序结构模型大致如下:

main.c 程序调用了add.cpp程序中的sub函数。

main.c内容如下:



  1. #include "add.h"

  2. int main()
  3. {
  4.    int c = 10;
  5.    printf("%d\r\n", sum(1,2));
  6.    return 0;
  7. }

复制代码


add.cpp 内容如下:


  1. #include "add.h"
  2. #include <iostream>


  3. int test::sub(int a, int b)
  4. {
  5.     return a-b;
  6. }

复制代码


在代码不改变的情况下,cmake怎么写?谢谢大家

出0入8汤圆

 楼主| 发表于 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[2]: *** [CMakeFiles/cpptest.dir/build.make:76: CMakeFiles/cpptest.dir/main.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/cpptest.dir/all] Error 2
make: *** [Makefile:84: all] Error 2



如果这样写:
cmake_minimum_required(VERSION 3.5)
project(cpptest  CXX)
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[2]: *** [CMakeFiles/cpptest.dir/build.make:84: cpptest] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/cpptest.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

搞蒙了

出50入8汤圆

发表于 2023-9-1 11:40:46 | 显示全部楼层
你的main内容不是c,是cpp

出0入42汤圆

发表于 2023-9-1 12:50:29 | 显示全部楼层
既然源码在手不管咋样, 直接都干成cpp就好了.

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

出0入8汤圆

 楼主| 发表于 2023-9-1 13:14:23 | 显示全部楼层
airbox 发表于 2023-9-1 11:40
你的main内容不是c,是cpp
(引用自3楼)

已更正。

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



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

出0入8汤圆

 楼主| 发表于 2023-9-1 13:15:39 | 显示全部楼层
albert_w 发表于 2023-9-1 12:50
既然源码在手不管咋样, 直接都干成cpp就好了.

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

main.c  是c程序。

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

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

出0入0汤圆

发表于 2023-9-1 14:19:22 | 显示全部楼层
道理我都懂,但add.cpp里提供的为啥是个::sub()函数……

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

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

真是要逼死强迫症啊……

出0入8汤圆

 楼主| 发表于 2023-9-1 14:44:02 | 显示全部楼层
jathenal 发表于 2023-9-1 14:19
道理我都懂,但add.cpp里提供的为啥是个::sub()函数……

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

这~~~~~~~~~~~~~~~~~~~~

出0入8汤圆

 楼主| 发表于 2023-9-3 12:27:57 来自手机 | 显示全部楼层
沉底了.。。。。。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 20:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表