2012-11-14 10 views
21

が、これはオブジェクトファイルをリンクするcc代わりg++の使用Makefileデフォルトのリンカの設定が

% cat Makefile 
main: main.o add.o 

% make 
g++ -Wall -pedantic -std=c++0x -c -o main.o main.cpp 
g++ -Wall -pedantic -std=c++0x -c -o add.o add.cpp 
cc main.o add.o -o main 
main.o:main.cpp:(.text+0x40): undefined reference to `std::cout' 
... 

私が言うにはどうすればよい(GNU)はに作る考えてみましょうccの代わりにg++(C++ライブラリをリンクする)を使用しますか?

答えて

27

(GNU)を確認しますが、ルールなしで依存関係を与えるのに十分であるので、いいですこれは、組み込みのルールがあります。

main: main.o add.o 
    # no rule, therefore use built-in rule 

この場合、ビルド内のルールは、オブジェクトファイルをリンクするための$(CC)を使用していますが。メイクをできるように

% make -p -f/dev/null 
... 
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH) 
... 
LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) 
... 
%: %.o 
# recipe to execute (built-in): 
     $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o [email protected] 

が正しいリンカを選んだ、LINK.ccLINK.oを設定するのに十分です。したがって、最小Makefileは、

% cat Makefile 
LINK.o = $(LINK.cc) 
CXXFLAGS=-Wall -pedantic -std=c++0x 

main: main.o add.o 
のように見えます。
関連する問題