Как я могу создать цель для _existing_ библиотеки? - PullRequest
0 голосов
/ 12 ноября 2018

В CMake мы можем add_library(mylib file1.cpp file2.cpp) и получить mylib.a в пути к библиотеке. Мы также можем target_include_directories(mylib INTERFACE some/directory), что влияет на цели в зависимости от mylib.

Но что, если у меня есть библиотека для начала, которую я не буду компилировать. Как я могу добавить цель, связанную с этим? То, что я добавлю в качестве зависимости, приведет к тому, что файл .a будет связан с, и для которого я могу установить target_include_directories()?

Примечание: я спрашиваю про CMake 3.x.

1 Ответ

0 голосов
/ 12 ноября 2018

CMake предоставляет альтернативную подпись для библиотек, которые уже скомпилированы:

add_library(
    mynamespace::mylib 
    STATIC                # or it could be SHARED
    IMPORTED
)

Более подробную информацию см. В официальной документации CMake .

с этим вы сможете добавлять свойства к цели, делая это

set_target_properties(
    mynamespace::mylib
    PROPERTIES 
    IMPORTED_LOCATION "path/to/libmylib.a"
)

Здесь неточной точности, если вы используете Windows DLL, вы должны передать путь к файлу DLL в IMPORTED_LOCATION и установить другое свойство IMPORTED_IMPLIB, которое указывает на файл .lib (не очень удобно).

Обратите внимание, что есть также эквивалентные свойства для каждой конфигурации (Debug и Release), для которых необходимо установить другое свойство (IMPORTED_CONFIGURATION), например, IMPORTED_LOCATION_DEBUG.

См. Также здесь и здесь в документации.

Чтобы избежать пропуска включаемых файлов, вы также можете уточнить каталог включения, используя INTERFACE_INCLUDE_DIRECTORY свойство

set_target_properties(
    mynamespace::mylib 
    PROPERTIES
    INTERFACE_INCLUDE_DIRECTORIES "path/to/mylib/include"
)

При этом при объявлении ссылки с использованием target_link_libraries() CMake будет считывать информацию об импортированной цели и неявно добавлять каталоги включения.

Официальная документация ссылка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...