【问题标题】:MakeFile.am: Mixing c and c++, new errorsMakeFile.am:混合 c 和 c++,新错误
【发布时间】:2012-07-08 07:33:37
【问题描述】:

我们在“c”中有很好的代码库。现在,我们正在为所有新模块迁移到 c++。我有一个案例在旧的 c 代码库中使用几个 c++ 类。单独地,两者都有效,即 c++ 模块和 c 模块单独工作并提供所需的 o\p。

当我混合使用它们时,即在 A.c 中调用 c++ 类时,它会引发大量与旧代码相关的错误。

在我们的 makefile.am 中,我们之前有一个选项 cc=gcc,现在我们将其更改为 cc=g++,因为它抛出了一些错误。最后带有 make 的 makefile.am 创建了一个库,我们说 libx.a。 makefile.am 包含各种早期的源文件,即 A.c,x.c,y.c....

我最初在 A.c,x.c 下修复了错误,假设它们使用新的 g++ 编译器。现在,它开始在 x.c 下抛出错误,像这样我们有各种源文件。

修复所有这些非常繁琐。我相信我缺少一些与这些错误相关的编译器标志选项。现在,这些错误中的大多数是类型转换错误,我使用 static_cast 等对其进行了转换。除此之外,很少有其他错误。但是,该代码是 c 中的工作代码,它只是混合和更改 makefile 会引发这些错误。

问: 1.如何摆脱这些错误? 2. 是否有任何编译器标志我需要使用以最小的努力继续工作? 3. 在这些过程中我做错了什么吗? 4. 大家建议对 makefile.am 进行任何更改吗?

对此的任何帮助表示赞赏。如果 Q 不清楚,请告诉我。

注意:我们使用 autoreconf、configure 和 make 运行我们的应用程序。

问候, 桑托什

【问题讨论】:

  • 打印出的错误是什么?此外,根据我的个人经验,g++ 在编译 C 代码时应该没有真正的问题,因此了解错误将有很大帮助。
  • 您永远不应该在 Makefile.am 中指定 CCCXX。这些是用户定义的变量,应该在运行配置时分配。

标签: c++ c makefile autotools


【解决方案1】:

make 将根据文件的扩展名使用$CC$(CXX),并且可以同时使用两者。例如,以*.cpp 结尾的文件用$(CXX) 编译,以*.c 结尾的文件用$(CC) 编译。因此,您不必将ccCC 全局设置为g++,除非您的C 代码经过适当修改以编译为C++。

【讨论】:

  • juanchopanza:我尝试了你提到的方式,即我从 makefile.am 中删除了 cc。制作了makefile。但是,它抛出了很多与系统相关的错误,包括 EX:/usr/include/stdio.h
  • @Santhosh 你应该用CC 编译C 代码和用CXX 编译C++ 代码。
  • 我相信,我准确地陈述了问题陈述。我有很多早期工作的源文件,都是 c 文件。现在,我添加了调用 c++ 类的代码。 Makefile.am 没有任何 CC 标志。它的配置正在创建 Makefile.in 和具有相关 CC 标志的 Makefile。我仍然收到错误。我相信我错过了一些简单的事情。告诉我。
  • @Santhosh 如果您的代码正在调用 C++ 类,则必须将其编译为 C++ 代码。您可以从 C++ 调用 C,但不能反过来。
猜你喜欢
  • 1970-01-01
  • 2017-12-13
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多