大佬教程收集整理的这篇文章主要介绍了Makefile 使用 .cpp 列表编译,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
可以用 make 编译一个 .cpp 列表吗? 在我的 makefile 中,我有 2 个列表,其中一个是 .o,第二个是 .cpp。 .o 的列表与 .cpp 相同,但路径不同。 我无法使用 vpath,因为我有多个同名的 .cpp。
我可以浏览 .o 但不能浏览 .cpp:
$(OBJs): $(SRC)
$(linkER) -g -o $@ $^ $(LDFLAGS)
$(OBJs) 是 .o 的列表,$(SRC) 是 .cpp 的列表
@H_976_2@makefile 示例:COMPILATEUR=g++
linkER=g++
LDFLAGS=
CFLAGS=-Og
PATH_BUILD=$(pwd)/Build/
EXE=BIDou
INCLUDES= -I"AAA/BBB" \
-I"AAA/BBB/CC/dd"
SRC= AAA/BBB/CC/dd.cpp \
AAA/BBB/hh.cpp \
AAA/BBB/CC/dd/ee.cpp \
AAA/BBB/cc.cpp
OBJs:= $(addprefix $(PATH_BUILD)/,$(notdir $(SRC:%.cpp=%.o)))
$(OBJs): $(SRC)
@mkdir -p $(PATH_BUILD)
@echo "\n##$<"
$(COMPILATEUR) $(INCLUDES) $(CFLAGS) "$<" -g -c -o $@
$(EXE): $(OBJs)
$(linkER) -g -o $@ $^ $(LDFLAGS)
clean:
rm -fr $(PATH_BUILD)
那个规则是……真的错了。目标是目标文件,但您使用的配方是生成可执行文件的链接命令,而不是生成目标文件的编译命令。
除非我们知道 SRC
和 OBJS
变量的内容,否则我们真的无能为力。
例如,如果所有目标文件都具有相同的源文件路径,只是扩展名从 .cpp
更改为 .o
,那么您甚至不需要定义构建这些目标文件的规则:make 有一个内置的规则;你可以写:
program: $(OBJS)
$(LINKER) -g -o $@ $^ $(LDFLAGS)
(如果您想从目标文件创建的程序名称是 program
)。
预计到达时间
如果没有将目标文件名可靠地转换为单个已知源文件的算法方法,那么您就无法编写能够完成这项工作的模式规则。
这意味着您必须手动写出所有依赖关系。你可以这样做:
$(OBJS) :
@mkdir -p $(@D)
@echo "\n##$<"
$(COMPILATEUR) $(INCLUDES) $(CFLAGS) "$<" -g -c -o $@
$(for S,$(SRCS),$(eval $(PATH_BUILD)/$(notdir $(S:%.cpp=%.o)): $S))
这创建了一种构建每个目标文件的方法,然后根据其相关的 .o
文件为每个 .c
文件编写一组单独的依赖项。
以上是大佬教程为你收集整理的Makefile 使用 .cpp 列表编译全部内容,希望文章能够帮你解决Makefile 使用 .cpp 列表编译所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。