有没有什么办法可以让 gcc 自动链接需要的目标文件或自动编译并链接需要的源文件?

2015-07-20 17:07:40 +08:00
 linux40

比如我有xxx.h,xxx.cc,xxx.o,main.cc,.cc都include了xxx.h。
当执行g++ main.cc -o main时,g++自动将xxx.cc编译并与main.cc编译成的目标文件链接,或自动将xxx.o与main.cc编译成的目标文件链接。

1046 次点击
所在节点    C
10 条回复
mozartgho
2015-07-20 17:21:14 +08:00
gcc没那么智能,它只是一个编译器,从严谨角度讲,它是需要严格的输入的;你需要automake
linux40
2015-07-20 17:34:50 +08:00
@mozartgho 用pragma不可能做到吗?
jdlau
2015-07-20 17:45:33 +08:00
写个makefile应该可以
xylophone21
2015-07-20 18:24:32 +08:00
你希望仅在当前目录下找xxx.cc呢?
还是在你指定的几个目录下找xxx.cc呢?
还是在系统中找xxx.cc呢?
还是系统在互联网上找xxx.cc呢?

你是希望找当前平台的还是交叉编译环境的呢?

这么多问题,总结起来就是说由于需求不明确,这个功能不可能放到gcc里。实际情况是这些信息会放到makefile里,它们是项目强相关的。

#pragma comment lib在gcc里对应的方法是在链接时-lxxx,它实际上指定了xxx.c编译成了libxxx库,也不是自动的,
linux40
2015-07-20 18:43:32 +08:00
@xylophone21 在系统中找,或指定的目录找。还有,关于可能自动这个词有误会,意思就是在include了某个头文件后也吧需要的文件链接了,就是让自己写的库使用起来跟标准库一样。。。
zhjits
2015-07-20 18:44:39 +08:00
autoconf, automake
xylophone21
2015-07-20 19:09:02 +08:00
@linux40

举例来说,
你有一个foo.h,但其对应的库不一定是foo.so啊,找的原则是什么呢?
OO一下,你有一个foo.h,但是实现可能有多个,找哪个呢?
交叉一下,你有一个foo.h,在多个平台上都有库(arm,mipse等),找哪个呢?

另外,标准库也不能只引头文件,不指定链接的,需要-lc的。
linux40
2015-07-20 19:40:50 +08:00
@xylophone21
预处理器指定?
但是使用标准库时好像不需要你手动指定?
比如只用标准库的时候只需要g++ main.cc -o main就好了。
xylophone21
2015-07-21 09:31:17 +08:00
main.c里只引了libc吗?

g++ main.cc -o main -v
你加个-v看看。
linux40
2015-07-21 13:06:45 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/206997

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX