拥有一个声称可以生成/更新某个目标文件但实际上不是的GNU Make目标可以吗?

问题描述 投票:0回答:1

目前,我有一个具有以下内容的makefile:

  • 从一堆目标文件链接可执行映像文件的目标
  • 一个模式规则目标,它编译链接器目标所依赖的各种目标文件

我要进行以下更改。

  1. 而不是直接编译目标文件,我希望上述模式规则目标为每个需要更新的目标文件创建一个空的object_file_name。update文件。本质上,此目标的工作是盘点实际上需要重新编译的所有目标文件。
  2. 编写一个新的目标,该目标将启动一个Perl进程,该进程将找到所有这些object_file_name。update文件,并为每个必须重新编译的目标文件在此Perl进程中进行编译。

我知道该怎么做2) ...那部分没有给我带来任何麻烦。我担心的部分是1)。原因是该目标基本上必须<< claim >>更新任何所需的目标文件,而实际上,仅针对每个此类目标文件创建一个。update文件,而不是为目标文件本身创建。[我认为我可以欺骗GNU Make,使其通过相应地声明我的依赖关系(伪代码,不是有效的GNU Make代码段)来在构建所有目标文件之前不尝试尝试链接任何东西:

# Phony target that reads the *.update files created by the pattern rule target below and then # compiles each object file for which an *.update file exists. COMPILE_OBJECTS : ... # Pattern rule target to take stock of all object files that need updating. Creates an *.update file for # each object file that needs recompiling. %.o : %.c : ... $(EXE_FILE_TO_LINK) : $(LIST_OF_OBJECT_FILE_PATHS) COMPILE_OBJECTS ...

但是我仍然担心,这可能会导致不确定的行为,因为我的模式规则目标基本上是在欺骗GNU Make来更新所需的目标文件。我的担心合理吗?

[基本上,我想在GNU Make和编译器之间插入一个中间层,以使GNU Make不会分别编译每个目标文件。相反,编译将在单个Perl进程中完成,该进程可以访问需要编译的目标文件的完整列表,从而使我能够执行GNU Make直接控制编译无法实现的各种奇特的事情。

[目前,我有一个makefile,它具有:一个目标,该目标将一堆目标文件中的可执行映像文件链接在一起;一个模式规则目标,该目标规则目标编译了各个目标文件中的链接器目标...

makefile gnu-make
1个回答
0
投票
是的,这是合法的,我经常使用这种模式。
© www.soinside.com 2019 - 2024. All rights reserved.