是否可以在 Makefile 的单次传递中使用 gcc/g++/nvcc automatic dependency -M 而无需将依赖项保存到文件中?
Is it possible to use gcc/g++/nvcc automatic dependency -M in a single pass of a Makefile without saving dependencies to a file?
我正在尝试使用 gcc/g++/nvcc 和 Makefile 提出自动依赖的解决方案。
我想我想出了一个解决方案,在任何编译目标之前在 Makefile 中调用 gcc -M $(SRC FILES),假设 Make 现在已经更新了编译目标的规则。
我认为可行的 Makefile 示例如下:
PROG = main.out
SRC = $(wildcard *.cc)
OBJ = $(SRC:.cc=.o)
all: $(PROG) | deps
$(PROG): $(OBJ)
g++ -o $@ $^
$(OBJ): $(SRC)
g++ -c $<
.PHONY: deps
deps:
g++ -M $(SRC)
现在我想知道是否调用
g++ -M $(SRC)
只是导致依赖项被打印到标准输出,事实上 Makefile 仍然none对自动依赖项更明智。
理想情况下,我正在寻找一种解决方案,它将 运行 在 Makefile 的单次传递中使用 gcc/g++/nvcc 自动依赖标志,最好是不需要的将依赖项保存到一大堆文件中。
您可以执行如下操作来获取 .o
和 .d
文件:
g++ -c main.cpp -o main.o -MP -MMD -MF main.d
所以在你的Makefile中定义你的依赖文件(例如DEPFILES
)并像上面的命令一样生成.d
,然后通过-
包含DEPFILES
,这告诉GNU使包含 dep 文件(如果存在)。
-include $(DEPFILES)
我正在尝试使用 gcc/g++/nvcc 和 Makefile 提出自动依赖的解决方案。
我想我想出了一个解决方案,在任何编译目标之前在 Makefile 中调用 gcc -M $(SRC FILES),假设 Make 现在已经更新了编译目标的规则。
我认为可行的 Makefile 示例如下:
PROG = main.out
SRC = $(wildcard *.cc)
OBJ = $(SRC:.cc=.o)
all: $(PROG) | deps
$(PROG): $(OBJ)
g++ -o $@ $^
$(OBJ): $(SRC)
g++ -c $<
.PHONY: deps
deps:
g++ -M $(SRC)
现在我想知道是否调用
g++ -M $(SRC)
只是导致依赖项被打印到标准输出,事实上 Makefile 仍然none对自动依赖项更明智。
理想情况下,我正在寻找一种解决方案,它将 运行 在 Makefile 的单次传递中使用 gcc/g++/nvcc 自动依赖标志,最好是不需要的将依赖项保存到一大堆文件中。
您可以执行如下操作来获取 .o
和 .d
文件:
g++ -c main.cpp -o main.o -MP -MMD -MF main.d
所以在你的Makefile中定义你的依赖文件(例如DEPFILES
)并像上面的命令一样生成.d
,然后通过-
包含DEPFILES
,这告诉GNU使包含 dep 文件(如果存在)。
-include $(DEPFILES)