gpt4 book ai didi

makefile - makefile 中的延迟条件赋值

转载 作者:行者123 更新时间:2023-12-02 19:44:28 24 4
gpt4 key购买 nike

我了解延迟分配(使用 = 分配事物,而不是 :=),并且我了解如何使用 #ifneq 和类似的条件赋值命令。如何进行延迟条件分配?

这是一个伪代码示例:

FOO = defined
BAR = $(defined(FOO) ? one : two)

test_1: $(BAR) #depends on one

FOO =

test_2: $(BAR) #depends on two

这样做的主要目的是为静态和动态构建动态配置链接器标志。由于循环依赖(除了 -fPIC 删除等),静态构建比动态构建更烦人。这样,几个变量就会根据 STATIC 的定义而改变(即 make STATIC=y)。我可以为每个需要变体的变量定义 VARVAR_STATIC,但我想保留它有一个全局开关。

令人惊奇的是,除了不动态编译的规则之外,一些子制造商还定义了必须动态编译的规则。因此,只有少数规则需要忽略该标志。这就是为什么我希望能够在同一个 Makefile 中打开和关闭它。

或者,当我需要切换标志时,我可以重新包含全局 Makefile,但这不是首选。

编辑:来自 Raczy 的解决方案,这是我的特定问题的具体语法:

#Makefile
all: test_1 test_2

CFLAGS = -Wfatal-errors -std=c++11 -Wall -Werror -O3
CFLAGS += $(if $(DSYM),-g,)
test_1: DSYM:=y
test_2: DSYM:=

test_%: test.cpp
g++ $(CFLAGS) $< -o $@

clean:
rm -f test test_sym test_back

最佳答案

如果我正确理解这个问题,它是条件、延迟和每个目标的组合。像这样的事情:

BAR = $(if $(FOO), one, two)
all: test_1 test_2
FOO = defined
test_1: local_BAR:=$(BAR) #depends on one
FOO =
test_2: local_BAR:=$(BAR) #depends on two
test_%:
echo $*: $(local_BAR)

关于makefile - makefile 中的延迟条件赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27994194/

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