【问题标题】:Makefile for .c and .cpp files does not work.c 和 .cpp 文件的 Makefile 不起作用
【发布时间】:2016-12-17 17:24:28
【问题描述】:

我尝试将 .c 和 .cpp 文件都编译为 C++,并将其构建成一个生成的二进制文件。我的 Makefile 看起来像这样(简化):

CFLAGS  = -Wall -fpermissive -DENV_EMBEDDED -I../utils/ -../usblib/include
CPPFLAGS = $(CFLAGS)
CXXFLAGS = $(CFLAGS)

LDFLAGS  = -lmisc -lrt

PNAME=Simulator

OBJ = simulated.o \
    buffer.o \
    common.o 

all: $(OBJ)
    $(LDFLAGS) -o $(PNAME) $(OBJ)

当我执行“make all”时,它会抱怨“不知道如何创建目标“simulated.o”。

CFLAGS 和 CPPFLAGS/CXXFLAGS 应该根据 .c/.cpp 文件自动使用 - 对吧?那么这个 Makefile 有什么问题呢?

谢谢!

【问题讨论】:

  • 1) 这不是关于不同的语言 C 或 C++,而是关于 makefile。不要垃圾邮件标签。 2) C 不是 C++ 不是 C!不要将 C 代码编译为 C++,反之亦然。相同的句法/语法并不意味着相同的语义。如果您想在 C++ 项目中使用 C 模块,请为 C++ 提供适当的标头并将 C 代码编译为 C。您是在询问 XY 问题。
  • 你看过make的手册吗?
  • 那是准确的错误信息吗?该消息的 GNU Make 版本是“不知道如何创建目标”,知道您正在使用哪个 Make 版本会很有用。你有文件simulated.cpp 吗?命令make -p -f/dev/null(或类似命令,取决于您的品牌)将打印规则的“数据库”——在其中搜索 .cpp 规则以获得可能的照明。
  • @Norman Gray:原始错误消息是“make: *** Keine Regel vorhanden, um das Target »simulated.o«, benötigt von »all«, zu erstellen. Schluss。” ;-) 这意味着“没有规则来创建所有人都需要的目标模拟.o”
  • @Elmi 啊,对。非国际化版本是“不知道如何创建目标”,因此可能值得寻找。否则,您的 Makefile 没有任何明显错误。如果我是你,我会先解决@Olaf 提到的C/C++ 混淆,然后研究make -pmake -d 的输出。在命令行运行时,这个精确的 makefile 会失败吗?你的来源叫做simulated.cpp,是吗?

标签: makefile


【解决方案1】:

我终于找到了问题的原因,它与那个有趣的 C/CPP 混合物无关。而不是这个文件simulated.c根本没有到位:-D我知道,混合C和C++有点奇怪,但在这种情况下可以解释,C文件来自微控制器的固件,CPP文件是 wxWidgets UI 组件,它们都是在普通 PC 上运行的固件模拟器。没有一个组件可以迁移到 C 或 C++,所有组件都必须保持原样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多