繁体   English   中英

Makefile的两个编译器问题

[英]Makefile two compilers issue

我被要求编写一个Makefile,该文件需要在两个编译器之间进行选择,并且每个编译器应支持3个构建版本(调试,发行版,测试)。

有很多变量会根据输入(编译器,编译器选项,输出目录,包含目录等)而变化。 我的第一个选择是遍历目标特定的变量并根据目标配置变量。 您认为这是个好主意吗?

我对这类变量不是很熟悉。 在我看来,如果我做这样的事情:

release: variable1=value1   #release is target
release: variable2=value2

release: 
      # some compilation rule

将仅配置variable1 我对吗?


更新资料

谢谢您的回复。 我正在尝试通过根据目标配置的其他变量来处理编译器选择问题。 但是,这就是问题所在。 我有以下几行:

release: CFLAGS = -DCORE_SW_VERSION='"$(CORE_SW_VERSION)"' -Wall 
release: CFLAGS += -fgnu89-inline -mno-volatile-cache $(INCLUDE)  
release: TARGET=release

在这行之后,我执行一些ifeq序列,在其中确定要使用哪个编译器(根据TARGET变量值)。 并且CFLAGS配置正确,但是TARGET变量为空。 这使我得出结论,您只能配置一个特定于目标的变量。 我对吗? 如果没有,我不知道我在做什么错。 请你帮助我好吗?

特定于目标的变量仅在构建目标和该目标的任何先决条件时定义。 您不能在整个makefile中任意使用特定于目标的变量(这听起来像您正在尝试使用ifeq )。 为此,您可能需要查看$(MAKECMDGOALS) 我不相信目标特定变量的数量有任何限制,当然也不是一个限制。

需要特定于目标的变量或$(MAKECMDGOALS)可能会警告您正在尝试强制执行某项本不希望做的事情。

对我来说尚不清楚,您是否要构建三个版本(每个调试器使用一个编译器进行调试/测试/发布)还是六个版本。 假设为三个,这是一个unix-y Makefile,根据目标使用不同的编译器和CFLAGS进行构建。 但是,请注意,可以使用RELEASE_CFLAGSRELEASE_CCDEBUG_CFLAGS等变量轻松对其进行编码。

all: release debug test

release: CC=gcc
release: CFLAGS=
debug: CC=gcc
debug: CFLAGS=-g
test: CC=cc
test: CFLAGS=-Wall

.PHONY: release debug test
release: release/exe
debug: debug/exe
test: test/exe

OBJECTS := test.o

release/%.o: %.c
        $(CC) $(CLFAGS) -c -o $@ $<

debug/%.o: %.c
        $(CC) $(CLFAGS) -c -o $@ $<

test/%.o: %.c
        $(CC) $(CLFAGS) -c -o $@ $<

release/exe: $(OBJECTS:%=release/%)
        $(CC) $(CFLAGS) -o $@ $^

debug/exe: $(OBJECTS:%=debug/%)
        $(CC) $(CFLAGS) -o $@ $^

test/exe: $(OBJECTS:%=test/%)
        $(CC) $(CFLAGS) -o $@ $^

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM