我将MPLAB IDE和XC8编译器用于PIC18器件的C项目。我正在构建一个包含多个源文件的项目,并且不知道如何制作该结构。
在项目中,我有以下几点:
我无法将enc28j60.c编译为独立文件,因为它取决于main.c中的定义。
我有一些关于如何设置此项目的问题:
#include
enc28j60.c吗? 如果没有,MPLAB如何知道从哪里获取文件? #include
enc28j60.h吗?现在,我在main.c中执行此操作,在之后定义enc28j60.h需要运行(而不是抛出#error
s。)答案 0 :(得分:2)
我设法通过稍微修改我的库和头文件来实现这一点。
首先,我添加了一个文件main.h,其中所有原型#define
和#include
都会出现。然后,在每个.h
文件中,我将其添加到顶部:
#ifndef SOME_LIB_IDENTIFIER // makes sure the lib only gets included once,
#define SOME_LIB_IDENTIFIER // has to be specific for every lib
#include "main.h" // to make sure everything's initialized (this line of course not in main.h)
每个.h
文件的最后一行是:
#endif
我将#include "enc28j60.h"
添加到enc28j60.c文件的顶部。现在可以编译该文件。
在main.h中,我添加了包含xc.h,plib.h,stdlib.h,stdio.h和enc28j60.h的包含。我没有包含.c
个文件。
我将main和enc28j60头文件和源文件都添加到我的MPLAB项目中。源文件编译得很好,两者都有。结果连在一起。
#define
和#include
s 答案 1 :(得分:1)
请勿包含.c
个文件。仅包含标题。如果您要在文件之间共享声明,请将它们放在单独的标题中,并在需要时包含该标题。
编译每个单独的源文件后,将生成的目标文件链接在一起。这涉及在所有源文件上调用编译器,然后在目标文件(带补充库等)上一次性调用链接器。