1

我正在尝试通过 GNU makefile 使用 armclang 编译器,但是在使用 -I 选项时两种工具之间存在冲突。

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

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

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

$(aarch32_bootobj): %.o: %.s
     @echo " [ASM ] $<"
     @armclang --target=armv8a-arm-none-eabi -Icommon/shared -c $< -o $@

运行 Makefile 时,我收到以下警告和错误:

    armclang: warning: argument unused during compilation: '-I common/shared'
    aarch32/shared/bootcode.s:32:10: error: Could not find include file 'boot_defs.hs'

其中 boot_defs.hs 存在于 common/shared 下

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

有什么方法可以正确运行 armclang 命令?在其他世界中,是否可以让 makefile 解析 -Icommon/shared 而无需任何自动格式化?

我一直在尝试很多技巧来解决这个问题,但没有任何成功。

非常感谢提前。

4

1 回答 1

3

GNU make 不会拆分-Icommon/shared选项,即使它确实armclang能够解析它。如果您@armclangMakefile 中的调用中删除 ,您将确切地看到做了什么make并且-Icommon/shared参数保持不变。

你的问题是armclang; 在跟踪器上看到这个错误。它不会将-I标志传递给它的集成汇编器。那么,一种解决方法应该是传递-no-integrated-asarmclang

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

如果这不起作用,请将.include指令替换#include为并将您的 asm 文件重命名为.S(大写S),这表明它们需要 C 预处理,或者传递armclang标志-x assembler-with-cpp此处记录了此行为。

于 2015-05-15T08:45:19.650 回答