';查找图书馆';在CMake中的循环中返回相同的值

';查找图书馆';在CMake中的循环中返回相同的值,cmake,Cmake,我正在尝试循环使用CMake中的库名称列表。在每次迭代中,我使用find_library搜索库: set(LIB_NAMES "TKBO;TKBRep;") set(LIBS_DIR /usr/local/OCCT/7.2.0/libd) FOREACH(LIB_NAME ${LIB_NAMES}) FIND_LIBRARY(LIB ${LIB_NAME} PATHS ${LIBS_DIR}) MESSAGE("<<${LIB_NAME}>>") MESS

我正在尝试循环使用CMake中的库名称列表。在每次迭代中,我使用
find_library
搜索库:

set(LIB_NAMES "TKBO;TKBRep;")
set(LIBS_DIR /usr/local/OCCT/7.2.0/libd)


FOREACH(LIB_NAME ${LIB_NAMES})
  FIND_LIBRARY(LIB ${LIB_NAME} PATHS ${LIBS_DIR})
  MESSAGE("<<${LIB_NAME}>>")
  MESSAGE("<<${LIB}>>")
  target_link_libraries(mySharedLib ${LIB})
ENDFOREACH()
set(LIB_名称为“TKBO;TKBRep;”)
集合(LIBS_DIR/usr/local/OCCT/7.2.0/libd)
FOREACH(LIB_NAME${LIB_NAME})
查找库(LIB${LIB\u NAME}路径${LIBS\u DIR})
消息(“”)
消息(“”)
目标链接库(mySharedLib${LIB})
ENDFOREACH()
对于以上内容,我得到了输出:

<<TKBO>>
<</usr/local/OCCT/7.2.0/libd/libTKBO.dylib>>
<<TKBRep>>
<</usr/local/OCCT/7.2.0/libd/libTKBO.dylib>>

当LIB_NAME更新时,
FIND_LIBRARY
似乎使用了过时的值。我还试图在循环结束时显式地
UNSET(LIB_NAME)
,但这也没有帮助

我可以忽略什么?

解决方法是:

UNSET(LIB_NAME CACHE)

有关类似问题,请参阅。

查找库的结果是一个缓存的变量,一旦找到库,该变量就不会更新

搜索不同库时,最好使用不同的结果变量:

FOREACH(LIB_NAME ${LIB_NAMES})
  set(LIB_VAR "LIB_${LIB_NAME}") # Name of the variable which stores result of the search
  FIND_LIBRARY(${LIB_VAR} ${LIB_NAME} PATHS ${LIBS_DIR})
  target_link_libraries(mySharedLib ${${LIB_VAR}})
ENDFOREACH()
此处
LIB_TKBO
变量用于
TKBO
库,而
LIB_TKBRep
变量用于
TKBRep