Как найти библиотеку с cmake?

Для соединения исполняемого файла с библиотекой, которая находится в стандартном месте можно сделать следующее в файле 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 должен действительно связаться против библиотеки, размещенной в sibdirectory? Интересно существует некоторая полезная опция к target_link_libraries, который указал бы, что библиотека находится в подкаталоге в standandard месте, например.

target_link_libraries(generate_mesh OpenMesh/OpenMeshCore)

Если это не возможно, там способ использовать find_library для поиска /usr/local/lib рекурсивно, включая его подкаталоги, для данного файла библиотеки?

12
задан dzhelil 1 August 2010 в 05:37
поделиться

1 ответ

Вы можете добавлять разные каталоги в find_library . Чтобы использовать эту библиотеку, вызовите cmake с помощью cmake -DFOO_PREFIX = / some / path ... .

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})
22
ответ дан 2 December 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: