【问题标题】:How to find a library with cmake?如何使用 cmake 查找库?
【发布时间】:2010-08-01 05:31:50
【问题描述】:

要将可执行文件与位于标准位置的库链接,可以在 CmakeLists.txt 文件中执行以下操作:

create_executable(generate_mesh generate_mesh.cpp)
target_link_libraries(generate_mesh OpenMeshCore)

如果正在链接的库被放置在

中,这将起作用
/usr/local/lib/libOpenMeshCore.dylib

但是,在这种情况下,库位于

/usr/local/lib/OpenMesh/libOpenMeshCore.dylib

如何指定 target_link_libraries 应该真正链接到放置在 sib 目录中的库?我想知道 target_link_libraries 有一些有用的选项可以指定该库位于标准位置的子目录中,例如

target_link_libraries(generate_mesh OpenMesh/OpenMeshCore)

如果不可能,有没有办法使用 find_library 递归搜索/usr/local/lib,包括它的子目录,以查找给定的库文件?

【问题讨论】:

    标签: linker cmake subdirectory


    【解决方案1】:

    您可以向find_library 添加不同的目录。要使用这个库,请通过 cmake -DFOO_PREFIX=/some/path ... 调用 cmake。

    find_library( CPPUNIT_LIBRARY_DEBUG NAMES cppunit cppunit_dll cppunitd cppunitd_dll
                PATHS   ${FOO_PREFIX}/lib
                        /usr/lib
                        /usr/lib64
                        /usr/local/lib
                        /usr/local/lib64
                PATH_SUFFIXES debug )
    
    find_library( CPPUNIT_LIBRARY_RELEASE NAMES cppunit cppunit_dll
                PATHS   ${FOO_PREFIX}/lib
                        /usr/lib
                        /usr/lib64
                        /usr/local/lib
                        /usr/local/lib64
                PATH_SUFFIXES release )
    
    if(CPPUNIT_LIBRARY_DEBUG AND NOT CPPUNIT_LIBRARY_RELEASE)
        set(CPPUNIT_LIBRARY_RELEASE ${CPPUNIT_LIBRARY_DEBUG})
    endif(CPPUNIT_LIBRARY_DEBUG AND NOT CPPUNIT_LIBRARY_RELEASE)
    
    set( CPPUNIT_LIBRARY debug     ${CPPUNIT_LIBRARY_DEBUG}
                        optimized ${CPPUNIT_LIBRARY_RELEASE} )
    
    # ...
    target_link_libraries(foo ${CPPUNIT_LIBRARY})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      相关资源
      最近更新 更多