Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
makefile中的延迟条件赋值_Makefile - Fatal编程技术网

makefile中的延迟条件赋值

makefile中的延迟条件赋值,makefile,Makefile,我了解延迟分配使用=而不是:=,并且我了解如何使用ifneq和类似命令进行条件分配。如何进行延迟条件赋值 以下是一个psuedo代码示例: FOO = defined BAR = $(defined(FOO) ? one : two) test_1: $(BAR) #depends on one FOO = test_2: $(BAR) #depends on two 其主要目的是为静态和动态构建动态配置我的链接器标志。静态构建比动态构建更烦人,因为除了-fPIC删除等,还存在循环依赖关

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

以下是一个psuedo代码示例:

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

test_1: $(BAR) #depends on one

FOO =

test_2: $(BAR) #depends on two
其主要目的是为静态和动态构建动态配置我的链接器标志。静态构建比动态构建更烦人,因为除了-fPIC删除等,还存在循环依赖关系。通过这种方式,一对变量根据STATIC的定义而变化,即使STATIC=y。我可以为每个需要变量的变量定义VAR和VAR_STATIC,但我希望它有一个全局开关

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

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

编辑:根据Come 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)

GNU make手册的章节解释了哪些部分是即时的,哪些部分是延迟的。如果这是有用的。是每个目标还是每个子目标都必须有动态需求?在适当的子make调用工作之前,是否可以取消导出/取消设置STATIC?如果我理解您的问题,我希望是每个目标。@Aggieboy当可能的配置数量增加时,“$或…”函数也可以很方便地使用,就像我需要返回并读取所有可用的Makefile函数一样。谢谢你,先生!