如何在不构建对象的情况下使用g ++ -Lhere -Lthere -lfoo来解析foo的库路径?

时间:2010-07-08 17:05:26

标签: c++ makefile linker resolution

我想显示一个库的显式路径,该路径将在编译的链接阶段使用。我想这样做,以便我可以将库作为依赖项添加到单独的目标文件。

换句话说,我经常使用以下链接:

g ++ myFile.cpp -Lsomewhere -Lelse -Lhere -Lthere -lfoo

有没有办法强制g ++,ld,ldd或其他东西使用-L来解析'-lfoo'而不实际链接任何东西,以便我可以使用显式路径作为依赖?有关更详细的信息,请参阅Makefile Updated Library Dependency

2 个答案:

答案 0 :(得分:1)

由于您知道链接器搜索目录以查找相关库(see the manual)的顺序,您可以使用Make vpath以相同的顺序搜索它们:

vpath %.so somewhere else here there

otherObjectFile: foo.so
  #whatever...

答案 1 :(得分:1)

这不太理想,我希望有一个更清晰的答案,但您可以从gcc获取默认搜索路径,然后搜索每个文件。这是在GNU make:

libnams = foo bar
dirs = somewhere else here there
dirs += $(subst :, ,$(subst =,,$(word 2,$(shell gcc -print-search-dirs | grep libraries))))
exts = a so
paths = $(foreach L, $(libnams), \
           $(firstword $(foreach D, $(dirs), \
              $(foreach E, $(exts), \
                 $(wildcard $(D)/lib$(L).$(E))))))