【问题标题】:'find_library' returns the same value in the loop in CMake'find_library' 在 CMake 的循环中返回相同的值
【发布时间】:2018-04-21 19:40:25
【问题描述】:

我正在尝试在 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()

对于以上内容,我得到了输出:

<<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),但这也无济于事。

我会忽略什么?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    find_library的结果是一个CACHED变量,一旦找到库,变量就不会更新了。

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

    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 库。

    【讨论】:

      【解决方案2】:

      解决者:

      UNSET(LIB_NAME CACHE)
      

      请参阅here 了解类似问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-31
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多