我想显示一个库的显式路径,该路径将在编译的链接阶段使用。我想这样做,以便我可以将库作为依赖项添加到单独的目标文件。
换句话说,我经常使用以下链接:
g ++ myFile.cpp -Lsomewhere -Lelse -Lhere -Lthere -lfoo
有没有办法强制g ++,ld,ldd或其他东西使用-L来解析'-lfoo'而不实际链接任何东西,以便我可以使用显式路径作为依赖?有关更详细的信息,请参阅Makefile Updated Library Dependency。
答案 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))))))