Настройка зависимостей между библиотеками (CMake)

#c #visual-studio #cmake

#c #visual-studio #cmake

Вопрос:

Я использую CMake для создания приложения, состоящего из дюжины проектов. Мы используем CMake для автоматической генерации решений для x86, x64, а также для Visual Studio 2005 и Visual Studio 2010.

Вот идея нашей организации:

  • .lib, который не имеет зависимости
  • b.lib, который не имеет зависимости
  • c.lib, который зависит от a и b
  • d.exe , который зависит от c

Каждый проект находится в своем собственном подкаталоге и имеет свой собственный CMakeLists.txt файл. Чтобы отслеживать библиотеки / DLL-файлы, созданные для наших разных платформ, мы автоматически исправляем каждую библиотеку / DLL-файл с помощью _x86 / _x64 и _vc80 / _vc100 (например, a_x86_vc100.lib) и _d для отладки (например, a_x86_vc100_d.lib).

В CMakeLists.txt файлах я использую target_link_libraries, чтобы связать каждую цель с соответствующими библиотеками, например:

TARGET_LINK_LIBRARIES(c debug a_ $ {VS} _${PLATFORM}d оптимизирован a $ {VS_DIR} ${PLATFORM} debug b ${VS} _${PLATFORM} d оптимизирован b $ {VS_DIR} _$ {PLATFORM})

В Visual Studio различные «зависимости проекта» между различными проектами не отображаются. Интересно, есть ли что-то, что я пропустил, или это просто несовместимо с нашей библиотекой после исправления.

Ответ №1:

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

Попробуйте:

 TARGET_LINK_LIBRARIES(c a b)

TARGET_LINK_LIBRARIES(d c)  # It knows that c depends on a and b
 

Вот и все!