【问题标题】:How to translate this command into a makefile file?如何将此命令转换为 makefile 文件?
【发布时间】:2021-08-12 04:56:03
【问题描述】:
gcc testr.c -L/usr/local/hdf/hdf5/lib /usr/local/hdf/hdf5/lib/libhdf5_hl.a /usr/local/hdf/hdf5/lib/libhdf5.a -ldl -lstdc++ -lm -Wl,-rpath -Wl,/usr/local/hdf/hdf5/lib -I /usr/local/hdf/hdf5/include

有一个名为testr.c的源文件,上面是命令,下面是我未完成的例子。

LIB=-L/usr/local/hdf/hdf5/lib
INC=-I/usr/local/hdf/hdf5/include

testr: testr.c
     gcc -o testr testr.c -I.

【问题讨论】:

    标签: gcc makefile


    【解决方案1】:

    让我们从最简单的转换开始:

    something:
        gcc testr.c -L/usr/local/hdf/hdf5/lib /usr/local/hdf/hdf5/lib/libhdf5_hl.a /usr/local/hdf/hdf5/lib/libhdf5.a -ldl -lstdc++ -lm -Wl,-rpath -Wl,/usr/local/hdf/hdf5/lib -I /usr/local/hdf/hdf5/include
    

    我们注意到usr/local/hdf/hdf5 出现了很多,所以我们把它放在一个变量中:

    HDF5 := /usr/local/hdf/hdf5
    
    something:
        gcc testr.c -L$(HDF5)/lib $(HDF5)/lib/libhdf5_hl.a $(HDF5)/lib/libhdf5.a -ldl -lstdc++ -lm -Wl,-rpath -Wl,$(HDF5)/lib -I $(HDF5)/include
    

    现在很明显,您可以以更简洁的方式调用静态库:

    something:
        gcc testr.c -L$(HDF5)/lib -lhdf5_hl -lhdf5 -ldl -lstdc++ -lm -Wl,-rpath -Wl,$(HDF5)/lib -I $(HDF5)/include
    

    显然预期的目标是testr,并且来源应该是先决条件:

    testr: testr.c
        gcc testr.c -L$(HDF5)/lib -lhdf5_hl -lhdf5 -ldl -lstdc++ -lm -Wl,-rpath -Wl,$(HDF5)/lib -I $(HDF5)/include
    

    添加几个自动变量:

    testr: testr.c
        gcc $< -o $@ -L$(HDF5)/lib -lhdf5_hl -lhdf5 -ldl -lstdc++ -lm -Wl,-rpath -Wl,$(HDF5)/lib -I $(HDF5)/include
    

    这是一个很好的规则。我们可以走得更远,这取决于您希望 Make 构建的其他目标,但现在应该足够了。 在采用最终版本之前,不要忘记测试上述每个步骤。

    【讨论】:

      【解决方案2】:

      或者,您可以使用 predefined implicit rules 并定义适当的变量和目标:

      DIR = /usr/local/hdf/hdf5/
      INC = $(DIR)include
      LIB = $(DIR)lib
      CPPFLAGS = -I$(INC)
      LDFLAGS = -L$(LIB) -Wl,-rpath,$(LIB)
      LOADLIBES = $(LIB)/libhdf5_hl.a $(LIB)/libhdf5.a
      LDLIBS = -ldl -lstdc++ -lm
      
      testr:
      

      请注意,这种方式以及使用 Beta 的解决方案,输出文件命名为 testr,而不是使用您的原始命令命名为 a.out。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-03
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多