我将HINTS
与find_library
一起使用,并惊讶地发现最后一条路径具有优先权。这是故意还是可以配置的东西。
set(MY_HINT_PATHS_A "/path/to/a;/path/to/b")
find_library(MY_LIBRARY_A
NAMES MyLib
HINTS ${MY_HINT_PATHS_A}/lib
ONLY_CMAKE_FIND_ROOT_PATH NO_DEFAULT_PATH
)
set(MY_HINT_PATHS_B "/path/to/b;/path/to/a")
find_library(MY_LIBRARY_B
NAMES MyLib
HINTS ${MY_HINT_PATHS_B}/lib
ONLY_CMAKE_FIND_ROOT_PATH NO_DEFAULT_PATH
)
message("MY_LIBRARY_A: ${MY_LIBRARY_A}")
message("MY_LIBRARY_B: ${MY_LIBRARY_B}")
打印
MY_LIBRARY_A: /path/to/b/lib/libMyLib.a
MY_LIBRARY_B: /path/to/a/lib/libMyLib.a
我原本预计
MY_LIBRARY_A: /path/to/a/lib/libMyLib.a
MY_LIBRARY_B: /path/to/b/lib/libMyLib.a
答案 0 :(得分:1)
CMake 列表不是类型,而是字符串值的解释。因此,列表变量的任何操作实际上都是对字符串的操作。
${MY_HINT_PATHS_A}/lib
没有将/ lib附加到列表中的所有元素,它只将/ lib附加到最后一个元素:
"/path/to/b;/path/to/a/lib"
绝对等同于将/lib
附加到变量的字符串值。
为获得理想的效果,您可以使用lib
和find_library
命令的PATH_SUFFIXES选项。或者直接将/lib
后缀附加到列表中的每个元素。