【发布时间】:2020-05-05 17:47:42
【问题描述】:
我可以运行 shell 命令从编译器中获取默认包含路径(并附加 -I):
arm-none-eabi-gcc -xc -E -Wp,-v /dev/null 2>&1 | sed -En '/#include <...> search starts here:/,/End of search list./{//!p;};' | sed 's/^ /-I/'
我正在尝试将其添加到 Makefile 中:
PROJECT_INC = $(shell arm-none-eabi-gcc -xc -E -Wp,-v /dev/null 2>&1 | sed -En "/#include <...> search starts here:/,/End of search list./{//!p;}" | sed "s/^ /-I/")
然后我得到一个错误:
Makefile:104: *** unterminated call to function `shell': missing `)'. Stop.
我尝试使用反引号,但没有帮助。尝试对 sed 命令使用单引号或双引号。我能在 SO 上找到的大多数类似问题都与命令中有 $ 时的扩展有关,但在这里应该不是问题。
如果我删掉命令:
PROJECT_INC = $(shell arm-none-eabi-gcc -xc -E -Wp,-v /dev/null 2>&1 )
然后它似乎正在减少输出。 外壳会返回
ignoring duplicate directory "/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/../../lib/gcc/arm-none-eabi/8.3.1/include"
ignoring nonexistent directory "/Users/mjeanson/miniconda3/envs/project/bin/../arm-none-eabi/usr/local/include"
ignoring duplicate directory "/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/../../lib/gcc/arm-none-eabi/8.3.1/include-fixed"
ignoring duplicate directory "/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/../../lib/gcc/arm-none-eabi/8.3.1/../../../../arm-none-eabi/include"
ignoring nonexistent directory "/Users/mjeanson/miniconda3/envs/project/bin/../arm-none-eabi/usr/include"
#include "..." search starts here:
#include <...> search starts here:
/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/arm-none-eabi/8.3.1/include
/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/arm-none-eabi/8.3.1/include-fixed
/Users/mjeanson/miniconda3/envs/project/bin/../lib/gcc/arm-none-eabi/8.3.1/../../../../arm-none-eabi/include
End of search list.
# 1 "/dev/null"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/dev/null"
在 Makefile 中运行它,它将从第一行以#include 开始丢弃,但否则它可以工作。不确定在sed 命令的管道正常工作后这是否仍然是一个问题(?)
如果这是相关的(并且在上面的代码 sn-ps 中还不是很明显),我的环境正在使用交叉编译器 (arm-none-eabi-gcc) 并且在 conda 环境中并且全部在 Mac 上运行。
我认为这无关紧要,但我需要这样做的原因是我可以使用一些静态分析工具。在自己编译代码的时候,我不需要添加默认的包含路径。
奖励:我尝试将 sed 命令合二为一,但不知道该怎么做...
【问题讨论】:
标签: c gcc sed makefile include-path