文章目录
- NXP MCUXPresso - .h: No such file or directory
- 概述
- 备注
- END
NXP MCUXPresso - .h: No such file or directory
概述
在尝试迁移 openpnp - Smoothieware project 从gcc命令行 + MRI调试方式 到NXP MCUXpresso工程.
快摸进门了.
按照C++工程编译的.
头文件路径都加好了, 都是用的工作区的相对路径. 文件也都在指定的位置.
但是编译时, 找不到头文件, 报错如下:
arm-none-eabi-gcc -std=c11 -DDEBUG -D__CODE_RED -D__NEWLIB__ -DCORE_M3 -DCPP_NO_HEAP -D__LPC17XX__ -O0 -fno-common -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -fmerge-constants -fmacro-prefix-map="../src/libs/LPC17xx/LPC17xxLib/src/"= -mcpu=cortex-m3 -mthumb -fstack-usage -MMD -MP -MF"src/libs/LPC17xx/LPC17xxLib/src/lpc17xx_clkpwr.d" -MT"src/libs/LPC17xx/LPC17xxLib/src/lpc17xx_clkpwr.o" -MT"src/libs/LPC17xx/LPC17xxLib/src/lpc17xx_clkpwr.d" -o "src/libs/LPC17xx/LPC17xxLib/src/lpc17xx_clkpwr.o" "../src/libs/LPC17xx/LPC17xxLib/src/lpc17xx_clkpwr.c"
../src/libs/LPC17xx/LPC17xxLib/src/lpc17xx_adc.c:34:10: fatal error: lpc17xx_adc.h: No such file or directory
34 | #include "lpc17xx_adc.h"
| ^~~~~~~~~~~~~~~
这种报错分2种情况:
- 文件在不在?
- 告诉编译器头文件包含路径在哪里?
MCUXPresso头一次用, 就按照vs或qt的设置方式. 以为只要设置了头文件路径就好使.
既然按照c++工程来编译, 那么就将c++方式的头文件路径填上, 还是报错. 但不是所有的都报错. 说明头文件路径填的对.
这咋弄?
最后想了一个很土的方法, 来验证头文件设置的问题.
- 在工程顶层目录和src同级的目录, 新建了一个inc目录, 将工程中所有.h都剪切到inc目录中, 如果有重名的就改名. 将c++头文件路径都设置为inc目录
然后将工程实现中用到的头文件的引用前面的具体子目录都去掉.
这时再编译报错时, 那就不是头文件路径设置错的问题, 只需要在inc目录看看这个.h是否存在.
排除了文件不存在的错误后, 发现还是有报错, 说找不到头文件.
尝试将用到这些.h的实现移除掉, 不行, 编译不过. 这些.c是有用的.
过了很久很久(大概一下午), 突然开窍了, 为啥这些说找不到.h的实现都是.c呢?..
去看一下, 是否c编译器也需要设置头文件路径.
看了一下, C和C++编译器的头文件路径是分别要设置的…
再重新编译工程, 报错消失.
都是坑啊.
备注
因为是迁移工程, 我哪知道头文件路径该设置哪些路径, 都是根据编译报错来添加头文件路径, 然后尝试编译.
这次长经验了, 如果报错说头文件找不到, 需要看是.cpp还是.c报错.
如果是.cpp报错, 就向c++编译器添加头文件路径.
如果是.c报错, 就向c 编译器添加头文件路径.