我试图通过使用armclang编译器,但在使用-I选项时,这两个工具之间存在冲突。
对于armclang编译器,-I的意思是“将指定的目录添加到搜索以查找包含的files.Syntax -Idir的位置列表”,没有空格。
对于GNU makefile‘-I’具有相同的含义(但有一个空格)。
在我的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存在于公共/共享下
当在makefile之外运行相同的armclang命令时,它可以工作。因此,我假设makefile已经格式化了-I /share选项,并在-I之后添加了自动空间。
有什么方法可以正确运行armclang命令吗?在其他情况下,让makefile解析-Icommon/shared而不需要任何自动格式化是可能的吗?
我已经尝试了很多技巧来解决这个问题,但没有成功。
提前谢谢。
发布于 2015-05-15 08:45:19
GNU不会拆分-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 $@如果这不起作用,将.include指令替换为#include,或者将asm文件重命名为.S (大写S),这表明它们需要C预处理,或者传递armclang -x assembler-with-cpp标志。这方面的行为已被记录为这里。
https://stackoverflow.com/questions/30253804
复制相似问题