#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
Вот и все!