c++ - 是否可以在 Makefile 的单次传递中使用 gcc/g++/nvcc automatic dependency -M 而无需将依赖项保存到文件中?

标签 c++ gcc makefile g++ nvcc

我试图想出一个使用 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 仍然对自动依赖项一无所知。

理想情况下,我正在寻找一种解决方案,该解决方案将在 Makefile 的单次传递中运行并使用 gcc/g++/nvcc 自动依赖项标志,最好是不需要将依赖项保存到一大堆文件中的解决方案。

最佳答案

您可以执行类似下面的操作来同时获得 .o.d文件:

g++ -c main.cpp -o main.o -MP -MMD -MF main.d

所以在你的 Makefile 中定义你的依赖文件(例如 DEPFILES )并生成 .d像上面的命令一样,然后包括 DEPFILES通过 - ,它告诉 GNU Make 包含 dep 文件(如果它存在)。

-include $(DEPFILES)

关于c++ - 是否可以在 Makefile 的单次传递中使用 gcc/g++/nvcc automatic dependency -M 而无需将依赖项保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39677329/

相关文章:

c++ - 生成文件 : How to link object files from different subdirectory and include different search paths

c - 我的 makefile 试图编译一个目录

c++ - 函数原型(prototype)返回错误

c++ - 编译错误 - boost::numeric::ublas::coordinate_matrix

c++ - C++中全局变量的使用

c++ - C++ 标准是否为编译器指定了 STL 实现细节?

编译错误( ‘;’ token 之前出现错误: expected ‘,’ , ‘)’或 ‘{’)

makefile - 使用动态目标名称进行制作

c++ - 为什么 boost::serialization 不检查 XML 文件中的标签名称?

c++ - 运算符链接在 C++ 中是如何发生的?