当我用gcc替换g ++时,为什么我的makefile失败了?

Yit*_*hou 0 c++ gcc makefile g++

我在OS X中编码这是我的Makefile:

#makefile for stack_5_1
# Yitong Zhou

stack_5 : main.o Stack.o LIFO_Stack.o Peekback_Stack.o
    g++ -o stack_5 main.o Stack.o LIFO_Stack.o Peekback_Stack.o
main.o: main.cpp Stack.h LIFO_Stack.h Peekback_Stack.h
    g++ -c main.cpp
Stack.o: Stack.cpp Stack.h
    g++ -c Stack.cpp
LIFO_Stack.o: LIFO_Stack.cpp LIFO_Stack.h
    g++ -c LIFO_Stack.cpp
Peekback_Stack.o: Peekback_Stack.cpp Peekback_Stack.h
    g++ -c Peekback_Stack.cpp

clean: 
    rm -rf *.o stack_5 
Run Code Online (Sandbox Code Playgroud)

错误:

.....  // very very long 
Dwarf Exception Unwind Info (__eh_frame) in Stack.o
Dwarf Exception Unwind Info (__eh_frame) in LIFO_Stack.o
Dwarf Exception Unwind Info (__eh_frame) in Peekback_Stack.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [stack_5] Error 1
Run Code Online (Sandbox Code Playgroud)

gcc和g ++有什么区别?当我用gcc替换g ++时,为什么我的编译失败了?

顺便说一句,我怎么能确保我的makefile可以在Cygwin,linux,OS X和其他环境中正确运行.

And*_*zos 6

gcc默认用于编译C.

g ++默认用于编译C++

主要区别在于g ++透明地添加了选项-x c++(使用C++)和-lstdc++(使用C++标准库).

试试这个Makefile:

stack_5: main.o Stack.o LIFO_Stack.o Peekback_Stack.o

main.o: main.cpp Stack.h LIFO_Stack.h Peekback_Stack.h

Stack.o: Stack.cpp Stack.h

LIFO_Stack.o: LIFO_Stack.cpp LIFO_Stack.h

Peekback_Stack.o: Peekback_Stack.cpp Peekback_Stack.h
Run Code Online (Sandbox Code Playgroud)

make会根据文件扩展名自动填写合理的规则.

另外看一下-MMgcc选项.它将自动生成正确的make依赖项(哪些头文件),因此您无需手动维护此列表.make手册和gcc手册中有更多关于如何使用它的内容.