【发布时间】:2019-09-26 04:54:50
【问题描述】:
尝试编写一个包含两个 .c 文件且没有头文件的 makefile。但是,似乎在线示例显示了带有标题的生成文件。
所以我尝试编写一个头文件,它会告诉我一个函数在其他地方被重新定义。我的头文件由两个 .c 文件中的函数声明组成。
#ifndef HEADER_H
#define HEADER_H
void calc(void parameters);
int main(int argc, char* argv[]);
struct compArray
{
int start;
int end;
int thr;
int m;
int r;
};
#endif
我很肯定这不是您编写标题的方式,但理想情况下,我希望我的 makefile 没有标题。下面是我的 Makefile:
all: thr_atomic.o thr_reduce.o
gcc -o make thr_atomic.o thr_reduce.o -lm -pthread
thr_atomic.o: thr_atomic.c
gcc -c thr_atomic.c
thr_reduce.o: thr_reduce.c
gcc -c thr_reduce.c
是否可以创建没有标头的 makefile?我的两个 .c 文件彼此独立。如果是这样,我该怎么做?如果没有,我会在 header.h 中添加什么来告诉计算机我的变量没有被重新定义并且彼此独立?
【问题讨论】:
-
#ifndef HEADER_H #define HEADER_H void calc(void parameters); int main(int argc, char* argv[]);结构 compArray { int 开始;打算;诠释苏;诠释米;诠释r; }; #endif
-
我也没有,所以在我的两个 .c 文件中我会在我的函数上使用 extern?
-
void parameters没有任何意义。也许你的意思是void *parameters?无论如何,没有理由只为生成文件添加标题。除了如何运行它之外,Make 对 C 编译器(或任何其他编译器)的工作一无所知。它当然不知道也不关心您的代码是否使用标头。 -
在.h文件中,将
void calc(...改为extern void calc(...,去掉int main(...这一行。 -
Make 不关心你是否有头文件,如果你没有需要在源文件之间共享的声明,C 不需要它们。你的 C 程序是如何相关的?哪个包含
main函数,如果第一个不调用它的函数,为什么需要另一个?