在C中将makefile与多个文件一起使用时很麻烦
|
开始让我的C程序了解makefile,但是尝试包含多个文件时遇到了一些麻烦。忽略以下程序是不完整的事实(就功能而言,而不是编译而言),我试图使用make文件来使该程序编译并运行。
这是我的make文件:
main: main.o IntList.o
gcc -o main main.o IntList.o
main.o: main.c
gcc -c -ansi -pedantic -Wall main.c
IntList.o: IntList.c IntList.h
gcc -c -ansi -pedantic -Wall Intlist.c
这是我收到的错误:
gcc -c -ansi -pedantic -Wall Intlist.c
gcc -o main main.o IntList.o
ld: duplicate symbol _getNewInt in IntList.o and main.o
collect2: ld returned 1 exit status
make: *** [main] Error 1
该程序的代码如下。我不确定是导致问题的Make文件还是程序文件中的包含问题(或两者都有!)
任何帮助都会很棒。干杯。
编辑:指导我在模块化方面朝正确方向发展的任何技巧将不胜感激,因为我不确定我是否以最佳方式这样做。
IntList.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Constants */
#define MAX_INTS 10
/* Signed ints can have a maximum of 10 digits. We make the length 11 to
* allow for the sign in negative numbers */
#define MAX_INPUT_LENGTH 11
#define EXTRA_SPACES 2
/* Typedefs / Structs */
typedef struct {
int list[MAX_INTS];
int noInts;
} IntList;
/* Proto Types */
int insertIntToList(int *list);
void shiftList(int offset);
void displayList();
IntList.c
#include \"IntList.h\"
int getNewInt(int *list)
{
int valid = 0, inputInt;
char inputString[MAX_INPUT_LENGTH + EXTRA_SPACES];
while(!valid)
{
printf(\"Input an int: \");
valid = 1;
if((fgets(inputString, MAX_INPUT_LENGTH + EXTRA_SPACES, stdin)) != NULL)
{
sscanf(inputString, \"%d\", &inputInt);
/* Check first that the input string is not too long */
if(inputString[strlen(inputString) - 1] != \'\\n\')
{
printf(\"\\nError: Too many characters entered \\n\");
valid = 0;
}
printf(\"\\nThe Int: %d\", inputInt);
printf(\"\\n\");
}
}
}
void shiftList(int offset)
{
}
void displayList()
{
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include \"IntList.c\"
int main(void)
{
int intList[10];
getNewInt(intList);
return EXIT_SUCCESS;
}
没有找到相关结果
已邀请:
6 个回复
财沟项胶
文件,而应包含
文件。否则,ѭ7中的代码将同时编译为
和
,因此您将获得重复的符号。 在main.c而不是ѭ7中使用此命令:
甲车劲
应该:
另外(尽管与您的问题无关),我建议不要在源文件的名称中使用大小写混合,因为这会导致可移植性问题,并且难以诊断“没有此类文件”错误-请使用小写字母,例如标准库头就可以了。
响摔衅幸
董碘奴星
在您的主程序中,它应该是:
通过包含C文件,可以在
和
目标文件中创建
,这就是为什么在尝试将它们链接在一起时会出现重复定义错误。
凄嘛姥
驮帽俺篮号