2016-02-12 2 views
0

Я хотел бы построить библиотеку статическим способом и интегрировать ее (вместе все ее зависимости) в моем проекте. Целевая платформа (в конечном счете) - андроид. В настоящее время я просто хочу протестировать весь процесс для моего Linux (debian 64-bit) vm на хосте Windows. Результирующая структура проекта должна выглядеть так:cmake: как рассказать библиотеке, где найти зависимости

project/ 
| 
|----- thirdparty/ 
|   | 
|   |----- lib1/ (depends on 2 and 3) 
|   |----- lib2/ 
|   ----- lib3/ 
----- application/ 

lib1 - это библиотека, которую я использую в своем приложении. Все библиотеки уже созданы для моей текущей целевой системы. Я использовал сценарии configure, которые поставлялись с библиотеками. Поскольку lib1 требует lib2 и lib3, я ссылался на них, используя with-lib2-prefix=<pathof-lib2>. Сценарий CMake, который я использую для создания приложения с QtCreator ссылки Lib1 как это:

ADD_LIBRARY(lib1 STATIC IMPORTED) 
SET(lib1_path ${CMAKE_SOURCE_DIR}/thirdparty/lib1/lib1.a) 
# and give path to external library with IMPORTED_LOCATION 
SET_TARGET_PROPERTIES(gpgme PROPERTIES IMPORTED_LOCATION ${lib1_path}) 

//later... 

target_link_libraries( ${COMPONENT_NAME}       
         lib1 
) 

Lib1 встречается, как и ожидалось, но, как вы, возможно, уже подозревают, что зависимости не обнаружено. Действительно, я никогда не говорил, как это сделать. Однако, поскольку я очень новичок в cmake, я не знаю, как это делается.

Либо я хотел бы сказать lib1, где можно найти lib2 и lib3 с cmake. Или, если это невозможно, не касаясь «build-process» lib1, возможно, мне удастся как-то правильно называть ./configure из cmake. У кого-то была аналогичная проблема, и я мог бы посоветовать, как это сделать?

+0

ли это помощь https://cmake.org/cmake/help/v3.0/command/link_directories.html: link_directories ($ {CMAKE_SOURCE_DIR}/ThirdParty/lib2) –

+0

Я попытался добавить эту строку перед ADD_LIBRARY и (вторая попытка) непосредственно перед target_link_libraries. К сожалению, это не сработало. Я получаю ту же ошибку, говоря «undefine reference » –

ответ

0

Я решил проблему. Я должен был добавить каждую библиотеку зависимостей для моего Cmake файла:

ADD_LIBRARY(lib3 STATIC IMPORTED) 
SET(lib3_path ${CMAKE_SOURCE_DIR}/thirdparty/lib3/lib/lib3.a) 
SET_TARGET_PROPERTIES(lib3 PROPERTIES IMPORTED_LOCATION ${lib3_path}) 

ADD_LIBRARY(lib2 STATIC IMPORTED) 
SET(lib2_path ${CMAKE_SOURCE_DIR}/thirdparty/lib2/lib/lib2.a) 
SET_TARGET_PROPERTIES(lib1 PROPERTIES IMPORTED_LOCATION ${lib2_path}) 

ADD_LIBRARY(lib1 STATIC IMPORTED) 
SET(lib1_path ${CMAKE_SOURCE_DIR}/thirdparty/lib1/lib/lib1.a) 
SET_TARGET_PROPERTIES(lib2 PROPERTIES IMPORTED_LOCATION ${lib1_path}) 

, а затем связать их в правильном порядке:

target_link_libraries( ${COMPONENT_NAME}       
         lib1 
         lib2 
         lib3 
) 

Если вы связываете link2 и lib3 перед тем lib1 связан Компоновщик «оптимизируют lib2 и 3 ".

Смежные вопросы