我试图在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)
,但这也没有帮助。
我能俯瞰什么?
答案 0 :(得分:3)
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
库。
答案 1 :(得分:0)