Makefile GNU make在-I(共享目录)选项后添加空白

Makefile GNU make在-I(共享目录)选项后添加空白,makefile,arm,gnu-make,armclang,Makefile,Arm,Gnu Make,Armclang,我试图通过GNU makefile使用armclang编译器,但在使用-I选项时,这两个工具之间存在冲突 对于armclang编译器,-I表示“将指定的目录添加到搜索所包含文件的位置列表中。Syntax-Idir”,不带空格 对于GNU makefile,'-I dir'具有相同的含义(但带有空格) 在我的makefile中,我有以下内容: $(aarch32_bootobj): %.o: %.s @echo " [ASM ] $<" @armclang --targe

我试图通过GNU makefile使用armclang编译器,但在使用-I选项时,这两个工具之间存在冲突

对于armclang编译器,-I表示“将指定的目录添加到搜索所包含文件的位置列表中。Syntax-Idir”,不带空格

对于GNU makefile,'-I dir'具有相同的含义(但带有空格)

在我的makefile中,我有以下内容:

$(aarch32_bootobj): %.o: %.s
     @echo " [ASM ] $<"
     @armclang --target=armv8a-arm-none-eabi -Icommon/shared -c $< -o $@
其中boot_defs.hs位于公共/共享目录下

在makefile外部运行相同的armclang命令时,它会工作。因此,我假设makefile已经格式化了-Icommon/share选项,并在-I之后添加了自动空间

有没有办法正确运行armclang命令?在其他情况下,是否可以让makefile在不进行任何自动格式化的情况下解析-Icommon/shared

我已经尝试了很多技巧来解决这个问题,但没有成功


非常感谢。

GNU make没有拆分
-Icommon/shared
选项,即使它拆分了
armclang
也可以解析它。如果从Makefile中的
armclang
调用中删除
@
,您将确切看到
make
的作用,并且
-Icommon/shared
参数保持不变

您的问题在于
armclang
;请参见跟踪器上的。它不会将
-I
标志传递给它的集成汇编程序。因此,解决方法应该是将
-no integrated as
传递给
armclang

     @armclang -no-integrated-as --target=armv8a-arm-none-eabi -Icommon/shared -c $< -o $@
@armclang-no integrated as--target=armv8a arm none eabi-Icommon/shared-c$<-o$@

如果不起作用,用
#include
替换
.include
指令,或者将asm文件重命名为
.S
(大写
S
),这表示它们需要C预处理,或者用cpp标志传递
-x汇编程序。此行为已记录在案。

非常感谢。这是一个伟大的分析。armclang版本6.01(我必须使用的版本)不支持“-no integrated as”,而带cpp的-x汇编程序正在工作。
     @armclang -no-integrated-as --target=armv8a-arm-none-eabi -Icommon/shared -c $< -o $@