Включить внешнюю библиотеку в cmake из флагов - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь связать внешнюю библиотеку, назовем ее foo, которая не скомпилирована с cmake. foo установлено, и я могу получить доступ к его флагам cxx и флагам ссылок через

foo-config --cflags
foo-config --libs

Я могу легко использовать вышеупомянутое в Makefile, но я хочу переключиться на cmake. Каков будет правильный подход для создания импортированной библиотеки с именем foo в моем CMakeLists.txt?

Я хотел бы использовать современный подход cmake, если это возможно (с использованием целей вместо глобальных переменных cmake).

Я попробовал следующее:

execute_process(
  COMMAND foo-config --cflags
  RESULT_VARIABLE FOO_EXISTS
  OUTPUT_VARIABLE FOO_FLAGS_RAW
  OUTPUT_STRIP_TRAILING_WHITESPACE)

execute_process(
  COMMAND foo-config --libs
  RESULT_VARIABLE FOO_EXISTS
  OUTPUT_VARIABLE FOO_LIBS_RAW
  OUTPUT_STRIP_TRAILING_WHITESPACE)

if (FOO_EXISTS EQUAL "0")
  separate_arguments(FOO_FLAGS UNIX_COMMAND "${FOO_FLAGS_RAW}")
  separate_arguments(FOO_LIBS UNIX_COMMAND "${FOO_LIBS_RAW}")
endif()

MARK_AS_ADVANCED(
    FOO_FLAGS_RAW
    FOO_LIBS_RAW
    )

add_library(foo SHARED IMPORTED)

target_compile_options(foo PUBLIC ${FOO_FLAGS})
set_target_properties(foo PROPERTIES
    LINK_FLAGS ${FOO_LIBS}
    )

, но когда я связываю библиотеку с моей целью, кажется, что флаги компиляции не передаются (они не отображаются, когда я использую VERBOSE = 1). Заранее спасибо!

1 Ответ

0 голосов
/ 15 января 2020

Я нашел обходной путь, я не хотел сам писать весь модуль поиска. Я только что создал файл pkg-config и использовал модуль cmake, уже написанный для этой цели. Спасибо @ Цыварев за предложение!

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