2016-11-04 13 views
0

何らかの理由でメイクファイルを作成する際に問題が発生することがあります。この場合、私は-std = C++ 11でclang ++を使用しています。メークファイルを作成するときに問題が発生する

CarBuyer: CarBuyer.cpp CarFactory Car 
    clang++ -std=c++11 -v -o CarBuyer CarBuyer.cpp CarFactory Car 
Car: Car.cpp Car.h 
    clang++ -std=c++11 Car.cpp Car.h 
CarFactory: CarFactory.cpp CarFactory.h 
    clang++ -std=c++11 CarFactory CarFactory.cpp CarFactory.h 
clean: 
    rm -f core CarBuyer 
: 私は順番に車(.cppファイルと.hの)に依存しているCarFactory(.cppファイルと.hの)に依存し、実行可能Carbuyer.cppを持って

私の現在の試みは、このようになります。

しかし、コンパイルするとき、私はCarFactoryから発信未定義の関数エラーを取得しています:

clang++ -std=c++11 CarFactory.cpp CarFactory.h 
clang: warning: treating 'c-header' input as 'c++-header' when in C++ mode, 
    this behavior is deprecated 
/usr/bin/../lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crt1.o: In 
    function `_start': 
(.text+0x20): undefined reference to `main' 
/tmp/CarFactory-13dbb4.o: In function `FordFactory::makeCar()': 
CarFactory.cpp:(.text+0x5a): undefined reference to `Ford::Ford()' 
/tmp/CarFactory-13dbb4.o: In function `ToyotaFactory::makeCar()': 
CarFactory.cpp:(.text+0xba): undefined reference to `Toyota::Toyota()' 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [CarFactory] Error 1 

打ち鳴らす++でコンパイル時にコードが私のエラーがMakefileであると信じて私をリードし、VS2015で正常にコンパイルではなく。

ご協力いただきましてありがとうございます。

答えて

0

まず、-cオプションでコンパイルするようにコンパイラに指示する必要があります。 、出力ファイルが定義されている必要があり

第二:-o file以上-o [email protected]

CarBuyer: CarBuyer.o CarFactory.o Car.o 
    clang++ -std=c++11 -o [email protected] CarBuyer.o CarFactory.o Car.o 

CarBuyer.o: CarBuyer.cpp 
    clang++ -std=c++11 -c -o [email protected] CarBuyer.cpp 

Car.o: Car.cpp Car.h 
    clang++ -std=c++11 -c -o [email protected] Car.cpp Car.h 

CarFactory.o: CarFactory.cpp CarFactory.h 
    clang++ -std=c++11 -c -o [email protected] CarFactory.cpp CarFactory.h 

clean: 
    rm -f core CarBuyer *.o 

がコンパイルルールにヘッダファイルを持ってはそれをチェックを与え、できれば打ち鳴らす++のコマンドラインからそれらを抑制し、非常に異例のことです。

関連する問題