cmake find_library中的提示路径顺序

时间:2015-12-07 22:19:04

标签: cmake

我将HINTSfind_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

1 个答案:

答案 0 :(得分:1)

CMake 列表不是类型,而是字符串值的解释。因此,列表变量的任何操作实际上都是对字符串的操作。

${MY_HINT_PATHS_A}/lib没有将/ lib附加到列表中的所有元素,它只将/ lib附加到最后一个元素:

"/path/to/b;/path/to/a/lib"

绝对等同于将/lib附加到变量的字符串值。

为获得理想的效果,您可以使用libfind_library命令的PATH_SUFFIXES选项。或者直接将/lib后缀附加到列表中的每个元素。