gpt4 book ai didi

c++ - 仅在需要时编译文件

转载 作者:行者123 更新时间:2023-11-27 23:21:13 25 4
gpt4 key购买 nike

我在目录 ./src 中有几个 cpp 和 hpp 文件。我将所有 cpp 文件编译成一个二进制文件,比如 ./bin/run。我只想在需要时重新编译,即它或其标题之一已更改。

我可能可以创建 Makefile,当且仅当文件被更改时,文件才会被重新编译,但这很不舒服,因为我的大部分代码都在标题中。 (不会改,因为product本身就是header,cpp文件就是test)。

我想在./build中存储临时的.o文件

我知道 g++ -MM 函数,但我不确定如何使用它。

我很高兴看到解决方案不需要使用 make,但只要足够简单,就可以使用任何其他系统。

UPD我会尽力澄清,问题是什么:

可能会创建新的 cpp,可能会添加或删除包含的内容,等等。我不想每次都编辑我的 makefile。

最佳答案

为了解决我提到的问题(-include 不是一个好的解决方案),我使用这样的方法:

build/%.o: %.cpp
@$(CC) -MD -c -Wall -o $@ $<
@cp build/$*.d build/$*.P
@sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < build/$*.P >> build/$*.d
@rm build/$*.P

-include build/*.d

不需要 `%.d 规则。

编辑:

@JackKelly [*cough*, *choke*] 向我展示了一种有效获取相同依赖文件的更好方法:

build/%.o: %.cpp
@$(CC) -MD -c -Wall -o $@ $<
@$(CC) -MM -MP -Wall -o $*.d $<

-include build/*.d

是的,你可以对同一个目标有多个规则,只要其中一个有命令即可;先决条件积累。我们的想法是获取这样的文件:

file.o: file.cpp headerfile.h
headerfile.h:

第二行(headerfile.h:)是headerfile.h的规则,没有先决条件或命令。它什么都不做,但这是一个规则,所以如果 headerfile.h 丢失,Make 会满意。

关于c++ - 仅在需要时编译文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com