私はg++ -std=c++17 -Wall -Og -g -o main *.cc
と完全にコンパイルする小さなコードを持っています。それが使用する理由私はCC = g ++を設定しても、私のmakefileはgccを呼び出すのはなぜですか?
CC = g++
CFLAGS = -Wall -std=c++17 -Og -g
DEPS = random_tools.h
OBJ = main.o random_tools.o
%.o: %.c $(DEPS)
$(CC) $(CFLAGS) -o [email protected] $<
main: $(OBJ)
gcc $(CFLAGS) -o [email protected] $^
しかし、私はmake
を実行すると、それがクラッシュし、私は本当に得ることはありません何
g++ -c -o main.o main.cc
g++ -c -o random_tools.o random_tools.cc
gcc -Wall -o main main.o random_tools.o
main.o: In function `main':
main.cc:(.text+0x1d): undefined reference to `std::cout'
main.cc:(.text+0x22): undefined reference to `std::ostream::operator<<(int)'
main.cc:(.text+0x27): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
main.cc:(.text+0x2f): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
main.o: In function `__static_initialization_and_destruction_0(int, int)':
main.cc:(.text+0x5d): undefined reference to `std::ios_base::Init::Init()'
main.cc:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status
make: *** [makefile:10: main] Error 1
を私に告げることです。今、私はTorはメイクファイルを持っているし、これまでのところ、私はこれを得たいですg++
の代わりにgcc
- g++
を使用するように指示しています。誰かがここで何が起きるかについて光を当てることができ、どうすればmake
私が言うことをすることができますか?ありがとう。
を使用すると、明示的にリンカコマンドでそれを使用するので:。。 'GCCの$(CFLAGS)-o $ @ $ ^'? –
「CC」は、従来はC++コンパイラではなく、C++コンパイラであることに注意してください。 C++コンパイラの通常の変数は 'CXX'と' CXXFLAGS'です。 – Barmar
一般的にmake変数をCに関連付けてC++に使用するのは悪い考えです。 C++のソースファイルに.cの接尾辞を付けることも悪い考えです。 –