让我们从最简单的转换开始:
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 构建的其他目标,但现在应该足够了。 在采用最终版本之前,不要忘记测试上述每个步骤。