c - Makefile给出重复错误C
问题描述
我创建了一个 makefile 来同时运行 9 个程序。
这9个程序的名称分别是init_aim.c、register.c、sort.c、schedule.c、add.c、class_schedule.c、class_list.c、grade.c和report.c。
在我实现的每个文件中的代码:
#include "aim.h"
int main(){
return 0;
}
我也有一个带有代码的头文件
#ifndef AIM_H
#define AIM_H
#endif
我唯一的目标是让我的 makefile 工作。并添加“all:”规则。我当前的 makefile 看起来像这样。
AIS: init_aim.o register.o sort.o schedule.o add.o class_schedule.o
class_list.o grade.o report.o
gcc -Wall -ansi -pedantic init_aim.o register.o sort.o
schedule.o add.o class_schedule.o class_list.o grade.o report.o -o AIS
init_aim.o: init_aim.c aim.h
gcc -Wall -ansi -pedantic -c init_aim.c -o init_aim.o
register.o: register.c aim.h
gcc -Wall -ansi -pedantic -c register.c -o register.o
sort.o: sort.c aim.h
gcc -Wall -ansi -pedantic -c sort.c -o sort.o
schedule.o: schedule.c aim.h
gcc -Wall -ansi -pedantic -c schedule.c -o schedule.o
add.o: add.c aim.h
gcc -Wall -ansi -pedantic -c add.c -o add.o
class_schedule.o: class_schedule.c aim.h
gcc -Wall -ansi -pedantic -c class_schedule.c -o
class_schedule.o
class_list.o: class_list.c aim.h
gcc -Wall -ansi -pedantic -c class_list.c -o class_list.o
grade.o: grade.c aim.h
gcc -Wall -ansi -pedantic -c grade.c -o grade.o
report.o: report.c aim.h
gcc -Wall -ansi -pedantic -c report.c -o report.o
请记住,这里的间距看起来不合适,因为代码太多。
当我运行 make 我得到:
gcc -Wall -ansi -pedantic -c init_aim.c -o init_aim.o
gcc -Wall -ansi -pedantic -c register.c -o register.o
gcc -Wall -ansi -pedantic -c sort.c -o sort.o
gcc -Wall -ansi -pedantic -c schedule.c -o schedule.o
gcc -Wall -ansi -pedantic -c add.c -o add.o
gcc -Wall -ansi -pedantic -c class_schedule.c -o class_schedule.o
gcc -Wall -ansi -pedantic -c class_list.c -o class_list.o
gcc -Wall -ansi -pedantic -c grade.c -o grade.o
gcc -Wall -ansi -pedantic -c report.c -o report.o
gcc -Wall -ansi -pedantic init_aim.o register.o sort.o schedule.o add.o
class_schedule.o class_list.o grade.o report.o -o AIS
clang: warning: argument unused during compilation: '-ansi' [-Wunused-
command-line-argument]
duplicate symbol _main in:
init_aim.o
register.o
duplicate symbol _main in:
init_aim.o
sort.o
duplicate symbol _main in:
init_aim.o
schedule.o
duplicate symbol _main in:
init_aim.o
add.o
duplicate symbol _main in:
init_aim.o
class_schedule.o
duplicate symbol _main in:
init_aim.o
class_list.o
duplicate symbol _main in:
init_aim.o
grade.o
duplicate symbol _main in:
init_aim.o
report.o
ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
make: *** [AIS] Error 1
如果有人知道如何解决重复错误并添加“all:”命令,请告诉我。
解决方案
您已main()
在每个代码文件中定义。
main()
是您尝试创建的可执行文件的“从这里开始”点。
由于多个“从这里开始”点,构建失败。
换句话说:
您只能main()
在一个可执行文件中拥有一个。
您可能正在考虑多线程编程。
在这种情况下,您需要对该主题进行一些研究。
您可能正在考虑从 shell 运行多个程序。
在这种情况下,您需要创建多个可执行文件并使用适当的 shell 功能分别启动它们,例如用于后台执行。
推荐阅读
- error-handling - 如果我的 Rest API 依赖于第三方服务并且服务的结果无效,我的 Rest API 的状态码应该是什么?
- saml - 在 IdP 使用 HTTP 重定向绑定发起注销请求后,用于 SAML 注销响应的 IdP 端点
- angular - 如何使用onError 源作为
- python - 在 VS 代码中运行键盘模块时出现问题
- javascript - 服务器的错误响应命中前端的成功回调
- python - python子模块找不到导入
- java - 我用它作为代码在 android studio 中播放视频,但它显示“无法播放此视频”
- c# - C#单击按钮无需手动单击
- python - y轴的数值大时如何写完整?
- html - 使用正则表达式 Python3 时超时