zxc*_*cat 30 makefile prebuild
如何运行必须在所有其他makefile命令之前执行的脚本?如果没有什么可构建的话,脚本的执行会很好(但不是强制性的).
我搜索了SO和谷歌,但找不到任何东西.
我有这个解决方法:
# myscript.bat output is empty
CHEAT_ARGUMENT = (shell myscript.bat)
CFLAGS += -DCHEAT_ARGUMENT=$(CHEAT_ARGUMENT)
AFLAGS += -DCHEAT_ARGUMENT=$(CHEAT_ARGUMENT)
Run Code Online (Sandbox Code Playgroud)
但它非常难看.还有其他方法可以在makefile中运行" pre-build step " 吗?
Amr*_*mro 29
我提出两种解决方案.第一个模仿NetBeans IDE生成的内容:
CC=gcc
.PHONY: all clean
all: post-build
pre-build:
@echo PRE
post-build: main-build
@echo POST
main-build: pre-build
@$(MAKE) --no-print-directory target
target: $(OBJS)
$(CC) -o $@ $(OBJS)
clean:
rm -f $(OBJS) target
Run Code Online (Sandbox Code Playgroud)
第二个是Eclipse IDE生成的:
CC=gcc
.PHONY: all clean
.SECONDARY: main-build
all: pre-build main-build
pre-build:
@echo PRE
post-build:
@echo POST
main-build: target
target: $(OBJS)
$(CC) -o $@ $(OBJS)
@$(MAKE) --no-print-directory post-build
clean:
rm -f $(OBJS) target
Run Code Online (Sandbox Code Playgroud)
请注意,在第一个版本中,无论主要版本是否确定为最新版本,都始终调用前置和后置构建.
在第二个中,如果主构建的状态是最新的,则不执行构建后步骤.虽然预构建步骤总是在两者中执行.
ndi*_*dim 11
根据您的make版本,如果CFLAGS和AFLAGS被评估了数十次,那么至少应该避免运行几十次:
CHEAT_ARG := $(shell myscript)
Run Code Online (Sandbox Code Playgroud)
注意冒号.
这只运行一次.永远不会超过一次,但也不会少于一次.选择自己的权衡.
您可以向Makefile添加一个特殊目标,并使所有构建规则依赖于:
run-script:
myscript
.o.c: run-script
$(CC) $(CFLAGS) -o $@ $<
.o.S: run-script
$(AS) $(AFLAGS) -o $@ $<
Run Code Online (Sandbox Code Playgroud)
根据您的脚本实际执行的操作,将其在Makefile(在autoconf术语中配置阶段)之前的阶段中运行一次可能会更有意义(并且工作量更少).
| 归档时间: |
|
| 查看次数: |
38482 次 |
| 最近记录: |