V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linux40
V2EX  ›  C

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

  •  
  •   linux40 · 2015-07-20 17:07:40 +08:00 · 1134 次点击
    这是一个创建于 3439 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如我有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编译成的目标文件链接。

    第 1 条附言  ·  2015-07-20 18:05:58 +08:00
    用预处理器可不可以呢,在include标准库的时候也需要链接目标文件吧,而如果只include了标准库的话就可以直接g++ main.cc -o main,标准库是怎么做到的呢?
    另,网上查了一下有#pragma comment lib,不过好像是windows下的方法。
    mozartgho
        1
    mozartgho  
       2015-07-20 17:21:14 +08:00
    gcc没那么智能,它只是一个编译器,从严谨角度讲,它是需要严格的输入的;你需要automake
    linux40
        2
    linux40  
    OP
       2015-07-20 17:34:50 +08:00
    @mozartgho 用pragma不可能做到吗?
    jdlau
        3
    jdlau  
       2015-07-20 17:45:33 +08:00
    写个makefile应该可以
    xylophone21
        4
    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
        5
    linux40  
    OP
       2015-07-20 18:43:32 +08:00
    @xylophone21 在系统中找,或指定的目录找。还有,关于可能自动这个词有误会,意思就是在include了某个头文件后也吧需要的文件链接了,就是让自己写的库使用起来跟标准库一样。。。
    zhjits
        6
    zhjits  
       2015-07-20 18:44:39 +08:00
    autoconf, automake
    xylophone21
        7
    xylophone21  
       2015-07-20 19:09:02 +08:00
    @linux40

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

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

    g++ main.cc -o main -v
    你加个-v看看。
    linux40
        10
    linux40  
    OP
       2015-07-21 13:06:45 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1000 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:58 · PVG 04:58 · LAX 12:58 · JFK 15:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.