你为什么要这样做
g++ -Wall -I/usr/local/include/thrift *.cpp -lthrift -o something
代替:
g++ -Wall -I/usr/local/include/thrift -c Something.cpp -o something.o
g++ -Wall -I/usr/local/include/thrift -c Something_server.cpp -o server.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_constants.cpp -o constants.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_types.cpp -o types.o
进而:
g++ -L/usr/local/lib -lthrift *.o -o Something_server
我说的对吗?第一步与第二步的作用本质上是一样的吗?
另外,为了使它们相同应该something
放在Something_server
第一行?
答案1
你是对的,最后你会得到相同的可执行文件(尽管名称不同);在第一种情况下,gcc 实际上会创建一堆临时目标文件,并在链接后将其删除,而第二种情况是您自己创建目标文件。
采用第二种方式做事的主要原因是允许增量建设。编译项目一次后,假设您更改了Something.cpp
.唯一受影响的目标文件是something.o
——没有理由浪费时间重建其他文件。像这样的构建系统make
会识别这一点,并且只有something.o
在将所有目标文件链接在一起之前才进行重建。