为什么编译器中不存在重新链接按钮?

时间:2012-09-18 07:54:09

标签: c++ compilation shared-libraries static-libraries

我使用eclipse在Linux上使用c ++工作。但我也使用Visual Studio。他们没有(或者至少我不知道该怎么做)一个重新链接项目的按钮。

示例:

我有一个大项目(1),有数百个cpp。该项目使用一个小型库(2)来做foo。如果我改变foo行为,并编译它,生成一个库,我需要清理大的proyect(1),重新编译,链接外部库(2)并工作。

问题是大项目没有改变,但是有数百个cpps,它的编译时间大约是5分钟。 5分钟是第二个图书馆的一个小改动。

可以避免这个问题吗?

提前致谢

3 个答案:

答案 0 :(得分:5)

我怀疑,但这只是猜测,您的项目在您的foo库与项目中的其他可交付项之间缺少依赖

通过这种方式,当您修改foo时,编译器不知道它需要重新编译(与foo中的更改一样多)项目的其余部分,这会强制您手动清理和重建。 / p>

通常依赖程序是以高度编译器特定的方式指定的,也许其他post from S.O可以帮助您,或者只是谷歌“eclipse c ++依赖关系管理”。

答案 1 :(得分:3)

您通常会将makemakefile一起使用。

使用此方法,您可以生成自己的构建代码规则,包括绕过许多源文件的编译,如果您只需要重新链接。

例如,makefile

prog: main.o other.o makefile
    gcc -o prog main.o other.o

main.o: main.c makefile
    gcc -c -o main.o main.c

other.o: other.c makefile
    gcc -c -o other.o other.c
如果您更改的唯一文件是main.c,则

不会重新编译other.c。它只需汇编other.c即可生成other.o,然后将other.omain.o链接在一起以创建prog

这通常是在“命令行”世界中完成的。这很可能也是它在许多IDE中的窗帘背后也是如此,只是隐藏在你身上。

您需要了解的是依赖性检查未按预期工作的原因。如果没有关于如何设置项目的进一步信息,那么确定它有点困难。

答案 2 :(得分:0)

在Linker-Settings-> Miscellaneous->其他对象下添加静态库。如果库较新,您的可执行文件将被重新链接。没有汇编。