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