1
makeを使って私のCプログラムをコンパイルしようとしていますが、この問題をよく理解できません。私は私のプロジェクトの 'calc'フォルダに3つのファイルを持っています:add.c sub.cとmain.c私は私のプロジェクトのルートフォルダにある私のMakefileを持っています。私のプロジェクトでは、私が言及したcalcフォルダがあります。これは私のMakefileは次のようになります。C - makefileを使った多重定義
CC=gcc
OBJECTS=obj/main.o obj/add.o obj/sub.o
elf/new: ${OBJECTS}
${CC} -o elf/new ${OBJECTS}
obj/main.o: calc/main.c
${CC} -c -g calc/main.c -o obj/main.o
obj/add.o: calc/add.c
${CC} -c -g calc/add.c -o obj/add.o
obj/sub.o: calc/sub.c
${CC} -c -g calc/sub.c -o obj/sub.o
clean:
rm obj/${OBJECTS} elf/new
私がコンパイルし、端末に「作る」と入力すると、私はこのようなエラーが出る:
gcc -c -g calc/add.c -o obj/add.o
gcc -c -g calc/sub.c -o obj/sub.o
gcc -o elf/new obj/main.o obj/add.o obj/sub.o
obj/add.o: In function `add':
/home/bigger/workspace/test/calc/add.c:1: multiple definition of `add'
obj/main.o:/home/bigger/workspace/test/calc/add.c:1: first defined here
obj/sub.o: In function `sub':
/home/bigger/workspace/test/calc/sub.c:1: multiple definition of `sub'
obj/main.o:/home/bigger/workspace/test/calc/sub.c:1: first defined here
collect2: error: ld returned 1 exit status
makefile:5: recipe for target 'elf/new' failed
make: *** [elf/new] Error 1
そして、私のコードがあります
[email protected]:~/workspace/test> cat calc/add.c
int add(int a, int b){
return a+b;
}
[email protected]:~/workspace/test> cat calc/sub.c
int sub(int a, int b) {
return a-b;
}
[email protected]:~/workspace/test> cat calc/main.c
#include <stdio.h>
#include "add.c"
#include "sub.c"
int main(int argc, char* argv[])
{
int a = 10;
int b = 5;
printf("add: %d\nsub:%d\n", a+b, a-b);
return 0;
}
c-ファイルではなく、ヘッダーファイルをインクルードします。 – tkausl
add/sub.cに/ sub.hを追加するようにファイルの名前を変更しました。 obj/add.o:ファイルが認識されません:ファイル形式が認識されません –
cファイルの名前をhファイルに変更しないでください。_additional_hファイル_を_宣言のみで記述します。 – tkausl