Makefile我只能执行一次配置吗?

问题描述 投票:-1回答:2

我正在尝试创建一个可以编译一些文件并创建一些输出的Makefile,但是首先,我希望它仅执行一次配置,下次我键入一次,则它将不会重新执行配置,除非我更改了参数,例如字首。

[我尝试使用touch,FORCE和if,在其他帖子中搜索了一下,但是在gcc和Makefiles中是Im newbie,所以我无法使其工作。

我的代码现在是((不包括其他规则,因为它们不影响配置):]

XLEN := 32
RISCV_PREFIX := riscv$(XLEN)-unknown-elf-
RISCV_GCC := $(RISCV_PREFIX)gcc
CFLAGS := -O2
WORKING_DIR:= $(shell pwd)
LIBRARY_DIR:= $(abspath $(dir $(lastword $(MAKEFILE_LIST)))/..)
B := $(shell echo $(LIBRARY_DIR))
$(info $(B))

--->(仅执行一次)---> CONFIGURATION := configure --prefix=$(LIBRARY_DIR) --with-arch=rv32if --with-abi=ilp32d

RISCV_TEST_DIR:=$(shell pwd)
SCRIPTDIR:=$(RISCV_TEST_DIR)/../../tools

RISCV_OPTIONS = -o  
RISCV_LINK = $(RISCV_GCC) $(PROGRAMS) $(RISCV_OPTIONS) $@ $(CFLAGS) #produces .elf file!
RISCV_OBJDUMP = $(RISCV_PREFIX)objdump -D                           #produces a dump file to see the assembly code!
RISCV_OBJCOPY = $(RISCV_PREFIX)objcopy -O binary                    #produces a bin file!

%.elf: %.c
    $(info Generating .elf file from files: $(PROGRAMS_NO_EX))
    $(RISCV_LINK)
    $(info Success!)
    $(info ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~)
%.dump: %.elf
    $(info Copying assembly to dump file $(PROGRAMS_NO_EX).dump)
    @$(RISCV_OBJDUMP) $< > $@
    $(info Success!)
    $(info ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~)
%.bin: %.elf
    $(info Generating bin file)
    @$(RISCV_OBJCOPY) $< $@
    $(info Success!)
    $(info ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~)
%.hex: %.bin 
    $(info Generating hex file)
    echo cd $(SCRIPTDIR)
    $(info Running binary to hex >>>)
    python $(SCRIPTDIR)/bin2hex.py $< -a 0x0 > $@ || exit -1
    $(info Hex Generation Successful!)
    $(info ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~)

all: $(PROGRAMS_TO_CREATE); if [ -a $(LIBRARY_DIR)/config.status ]; then cd $(LIBRARY_DIR) && $(CONFIGURATION); fi;

configure: config.status
    touch configure

config.status:
    cd $(LIBRARY_DIR) && $(CONFIGURATION);

.PHONY: all clean
clean:
    $(info Cleaning files...)
    @rm -rf *.elf *.hex *.map *.objdump *.i *.s *.bin *.dump
    $(info Done cleaning!)

提前谢谢!

c gcc makefile configuration riscv
2个回答
0
投票

我相信您的配置语句唯一的问题是config.statusconfigure规则中的路径不正确,因为它们确实位于$(LIBRARY_DIR)中。当路径正确时,它将仅正确运行一次配置:


0
投票

通过@raspy的帮助设法解决了这样的问题:

© www.soinside.com 2019 - 2024. All rights reserved.