这是我的make文件。而且,我正在尝试使用unifdef运行部分预处理。但是在执行unifdef后失败了。
#HELLO = world
HELLO_WORLD = $(HELLO) world!
COMMA := ,
VAR_ARG_LIST_A := $(subst $(COMMA), ,$(VAR_ARG_LIST))
VAR_ARG_LIST_1 := $(word 1,$(VAR_ARG_LIST_A))
VAR_ARG_LIST_2 := $(word 2,$(VAR_ARG_LIST_A))
VAR_ARG_LIST_3 := $(word 3,$(VAR_ARG_LIST_A))
VAR_ARG_LIST_4 := $(word 4,$(VAR_ARG_LIST_A))
VAR_ARG_LIST_5 := $(word 5,$(VAR_ARG_LIST_A))
VAR_ARG_LIST_6 := $(word 6,$(VAR_ARG_LIST_A))
all:
# echo $(HELLO_WORLD)
echo $(VAR_ARG_LIST_1)
# echo $(VAR_ARG_LIST)
echo $(VAR_ARG_LIST_2)
echo $(VAR_ARG_LIST_3)
echo $(VAR_ARG_LIST_4)
echo $(VAR_ARG_LIST_5)
echo $(VAR_ARG_LIST_6)
unifdef -USW1 -USW2 -USW3 -USW4 -USW5 -USW6 -t file1.txt > file2.txt
错误是
make VAR_ARG_LIST=AW1,AW2
echo AW1
AW1
echo AW2
AW2
echo
echo
echo
echo
unifdef -USW1 -USW2 -USW3 -USW4 -USW5 -USW6 -t file1.txt > file2.txt
make: *** [all] Error 1
file1.txt的内容是:
#ifdef SW1
This is a file1
#endif
This is file file 1
This is file file 2
This is file file3
file2.txt的内容是:
This is file file 1
This is file file 2
This is file file3
执行unifdef命令后立即失败。
答案 0 :(得分:1)
问题是如果输出与输入不同(即,如果它做任何事情),unifdef将退出状态1,但是Make会将非零状态解释为失败并中止。你可以用连字符解决这个问题:
-unifdef -USW1 -USW2 -USW3 -USW4 -USW5 -USW6 -t file1.txt > file2.txt
现在Make将报告
make: [all] Error 1 (ignored)
继续前进。 (如果它让你烦恼,可能有办法压制错误信息。)
答案 1 :(得分:1)
如果您不关心unifdef的退出代码,那么只需确保配方行以真值退出。例如:
unifdef -USW1 -USW2 -USW3 -USW4 -USW5 -USW6 -t file1.txt > file2.txt || true
将确保该行始终成功。
答案 2 :(得分:1)
unifdef的2.7版(2013年3月发布)有一个-x选项来控制退出状态逻辑,因此它可以更好地与make一起使用。您可能希望使用-x1,以便make确保unifdef确实进行了更改。见http://dotat.at/prog/unifdef/