【问题标题】:GNU make is adding white space after -I (shared directory) optionGNU make 在 -I (共享目录)选项之后添加空格
【发布时间】:2015-05-15 07:22:10
【问题描述】:

我正在尝试通过 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 而无需任何自动格式化?

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

非常感谢提前。

【问题讨论】:

    标签: makefile arm gnu-make armclang


    【解决方案1】:

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

    你的问题是armclang;请参阅跟踪器上的this bug。它不会将-I 标志传递给它的集成汇编器。那么,一种解决方法应该是将-no-integrated-as 传递给armclang

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

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

    【讨论】:

    • 非常感谢 Wintermute。这是一个很好的分析。 armclang 6.01 版(我必须使用的版本)不支持“-no-integrated-as”,而 -x assembler-with-cpp 正在工作。
    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2017-05-15
    • 2010-12-06
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多