cmake - две цели, которые зависят от одной статической библиотеки, которая должна быть скомпилирована на основе создаваемой цели - PullRequest
0 голосов
/ 02 июля 2019

У меня есть статическая библиотека и два целевых исполняемых файла, назовем их libA , EXE1 , EXE2 .

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

Скажем, если я собираю EXE1,Затем мне нужно включить макросы в libA и связать с ней другую статическую библиотеку.

Если я собираю EXE2, мне нужно отключить макросы в libA и не ссылаться на другую библиотеку.

Я запутался в том, как решить эту проблему.Пожалуйста, помогите в решении этой проблемы.

1 Ответ

2 голосов
/ 02 июля 2019

Вы можете использовать интерфейсную библиотеку следующим образом:

cmake_minimum_required(VERSION 3.10)
project(test)

add_library(libA INTERFACE)
target_sources(libA INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/liba.c)

add_executable(exe1 exe1.c)
target_link_libraries(exe1 libA)
target_compile_definitions(exe1 PUBLIC -DENABLE_THE_MACROS)

add_executable(exe2 exe2.c)
target_link_libraries(exe2 libA libOtherStatic)
target_compile_definitions(exe1 PUBLIC -DDISABLE_THE_MACROS)

libA - это «виртуальная» цель, которая не производит никаких выходных данных, но может быть связана с другими целями (здесь exe1 и exe2) Любая цель, которая ссылается на libA, автоматически получит также источники libA. Обратите внимание, что мне пришлось сделать путь абсолютным, чтобы предотвратить предупреждение.

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