问题:
由于工程可配置度高,想在makefile的target中用条件判断来决定使用哪个ld文件。但不知语法如何。
解决方案:
发现下面这个链接能够回答我的问题。
【已解决】Makefile中目标中嵌套使用ifeq条件判断 – 在路上 (crifan.org)
遗留问题:
1 能否在target后定义变量,并在运行时根据某种条件赋值,还没有找到解决方案。
2 本来想在target中用“ifeq (,$(wildcard $(BUILD_DIR)/$(TEST).ld))” 来判断文件是否存在,决定使用哪个ld文件,结果发现wsl2下和原生的linux系统下结果不一样。后者下可以达到我的目标,但在WSL2下,该ld文件明明之前刚产生,但结果还是认为不存在,可能WSL2下刚产生的文件确实不能实时判断是否存在,有一段延迟。
遗留问题解决 补充:
最后发现之前的办法还是不靠谱,最后采用下面的方法解决:
cp -rpf ${RTL_BUILD_DIR}/link.ld test_case.ld 2>/dev/null || : && \
cp -rpf ${RTL_BUILD_DIR}/${TEST}.ld test_case.ld 2>/dev/null || : && \
就是如果两个文件都存在,最后复制的文件如果存在就会覆盖前面的,其优先级最高。
带的参数是为了当文件不存在时,不引发错误。参见:
shell – 当源文件不存在时,如何让’cp’命令不会触发错误?_xxom-优快云博客
比较完美的解决了我的makefile 需求。