如何打印Makefile中已展开的变量?无需新增规则获取libdir最终值
如何在不修改Makefile的情况下打印展开后的变量值
其实你之前用make -pns得到的是变量的原始定义,而不是展开后的值——make在打印内部数据库的时候,会保留变量的引用形式,只有当实际需要使用变量时才会完成展开。不用修改原Makefile的话,有几个简单的方法可以直接拿到最终展开后的libdir值:
方法一:用make --eval直接执行展开输出
这是最直接的方式,通过命令行让make临时执行一个echo操作,自动展开变量:
make -f 你的Makefile路径 --no-print-directory -s --eval='@echo $(libdir)'
--no-print-directory:避免输出make进入/离开目录的冗余信息-s:静默模式,不输出执行的命令本身,只显示结果--eval:让make执行后面的echo语句,此时$(libdir)会被完全展开成最终值
方法二:临时定义一个目标并执行
如果你觉得上面的参数有点多,也可以在命令行临时定义一个打印目标,让make执行它:
make -f 你的Makefile路径 -s print-libdir print-libdir:;@echo $(libdir)
这里我们临时定义了print-libdir目标,它的动作就是打印展开后的libdir,执行后就能直接看到结果。
方法三:利用make info函数输出
make的info函数会直接输出内容到标准输出,我们可以用命令行触发这个函数:
make -f 你的Makefile路径 --no-print-directory '$(info $(libdir))'
这个命令会让make执行info函数,展开$(libdir)后直接打印出来,同样不需要修改原Makefile。
这些方法的核心都是让make实际触发变量展开,而不是仅仅打印它的原始定义,这样就能得到你想要的/usr/local/lib啦。
内容的提问来源于stack exchange,提问作者skalee
相关产品推荐
相关产品推荐

