【发布时间】: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 -p和make -d的输出。在命令行运行时,这个精确的 makefile 会失败吗?你的来源叫做simulated.cpp,是吗?
标签: makefile