经常出现如下现象:之前编译好的工程项目,拷贝到其它盘或者其它文件夹或者将最外层文件夹重命名再编译,就会出现Cannot include source file “XX.X“ file not found的错误信息,如何彻底解决呢?本文给出了终极解决方案。
解决方法是:
(一)、系统.h文件用绝对路径,即#include <XXXX.h>
例如:
#include <iom128v.h> //ICC AVR
#include <macros.h> //ICC AVR
#include <math.h>
#include <stdlib.h>
#include <string.h>
(二)、用户.h文件用相对路径,即#include "XXXX.h"
例如:
#include "USART0.H"
#include "USART1.H"
#include "DI.h"
#include "DO.h"
(三)、Options...->Project 勾选Relative Paths
(四)、Options...->Paths--->Add添加相对路径
(1)、一级文件夹中的用户.h文件的相对路径
D:\ICCAVR\ADS8320 下面有一个 ADS8320.h文件。
在Options...->Paths--->Add添加相对路径如下:
../ADS8320;
(2)、二级文件夹中的用户.h文件的相对路径
D:\ICCAVR\MSCOMM 下面有两个文件夹(CRC16和MODBUS),在CRC16文件夹下有一个CRC16.h文件,在MODBUS文件夹下有一个MODBUS_SLAVE.h文件。
在Options...->Paths--->Add添加相对路径如下:
../MSCOMM/MODBUS;
../MSCOMM/CRC16;
下面演示如果不按照上述方法创建的工程拷贝到其它盘或者其它文件夹会出现什么异常。
一、桌面上创建的工程项目,在桌面上编译OK
桌面创建了一个ICCAVR工程项目,存放在ICCAVR文件夹下,如下图所示。
(1)、BSP文件夹下有2个文件:USART1.C和USART1.H
(2)、MODBUS文件夹下有4个文件:CRC16.C和CRC16.H,MODBUS_SLAVE.C和MODBUS_SLAVE.H。
(3)、ICCAVR7.22中添加platform.h头文件的路径: ICCAVR.
路径全称为:C:\Users\liqin\Desktop\ICCAVR
(4)、ICCAVR7.22中添加USART1.H头文件的路径: BSP。
路径全称为:C:\Users\liqin\Desktop\ICCAVR\BSP
(5)、ICCAVR7.22中添加CRC16.H头文件和MODBUS_SLAVE.H头文件的路径:MODBUS。
路径全称为:C:\Users\liqin\Desktop\ICCAVR\MODBUS
(6)、编译工程项目,编译OK。
桌面上的创建的工程项目,在桌面上编译OK。
二、桌面上创建的工程项目,拷贝到D盘根目录下编译,编译错误
错误信息为:Cannot include source file "XX.X" file not found
三、错误原因
在Options...->Paths--->Add中增加的头文件的路径为绝对路径,分别为:C:\Users\liqin\Desktop\ICCAVR、C:\Users\liqin\Desktop\ICCAVR\BSP和C:\Users\liqin\Desktop\ICCAVR\MODBUS,必须将绝对路径修改为相对路径。
(1)、C:\Users\liqin\Desktop\ICCAVR对应的相对路径为 ..
(2)、C:\Users\liqin\Desktop\ICCAVR\BSP对应的相对路径为 ../BSP
(3)、C:\Users\liqin\Desktop\ICCAVR\MODBUS对应的相对路径为 ../MODBUS
四、解决过程
1、Options...->Project 选中Relative Paths
2、Options...->Paths--->Add增加platform.h头文件的路径:C:\Users\liqin\Desktop\ICCAVR的相对路径 ..
3、Options...->Paths--->Add增加USART1.h头文件的路径:C:\Users\liqin\Desktop\ICCAVR\BSP的相对路径 ../BSP
4、Options...->Paths--->Add增加CRC16.h头文件和MODBUS_SLAVE.H头文件的路径:C:\Users\liqin\Desktop\ICCAVR\MODBUS的相对路径 ../MODBUS
5、再次编译,一切编译OK
6、从D盘根目录拷贝到C盘根目录,再次编译,一切编译OK