Итак, я столкнулся с довольно большой головной болью, создающей мое программное обеспечение с помощью CMake.CMake: библиотеки переопределения, добавленные target_link_libraries
Я создаю стороннюю библиотеку статически (dlib), для которой требуются zlib и libpng (как статические, так и встроенные) библиотеки для поддержки PNG-функций. CMakeFile предоставляется библиотекой COTS dlib делает основной:
target_link_libraries(dlib ${dlib_required_libs})
Это делает все его библиотеку, сконфигурированной как «общей» библиотека, которые в конечном итоге используется как для выпуска и отладки строит.
Это не проблема в Linux, но Windows имеет прекрасную «функцию» для указания библиотеки времени выполнения (/ MT или/MD или/MTd или/MDd). Любые несоответствия между этими флагами вызывают множественные ошибки определения символа во время соединения. Т.е. если libpng был построен с/MT и мое программное обеспечение использует/MTd, они будут несовместимы.
Чтобы облегчить это, у меня есть две встроенные версии zlib и libpng. Один набор, использующий флаг/MT для релизов, и другой/MTd для сборки Debug. Они счастливо соединяются в моем собственном программном обеспечении, используя оптимизированные/debug флаги в target_link_libraries, где они используются. HOWEVER, dlib (сторонняя сторона) связывает только набор выпусков zlib и libpng libs, так как он написан CMakeFile.
Мой главный вопрос: есть ли способ «переопределить» то, что dlib связывает, не изменяя его предоставленный CMakeFile? Я попытался переписать dlib_LIB_DEPENDS и выгнать его в кеш из отчаяния, но безрезультатно.
Согласно [dlib/CMakeLists.txt] (https://github.com/davisking/dlib/blob/master/dlib/CMakeLists.txt), библиотека 'PNG' выполняется с помощью' find_package' и 'zlib 'компилируется из источников с самим проектом' dlib'. Таким образом, связь с 'zlib' не является проблемой: скомпилированный' zlib' принимает те же определения компиляции, что и 'dlib', не так ли? – Tsyvarev
К сожалению, libpng зависит от zlib, поэтому для компиляции libpng необходим предварительный скомпилированный zlib. – mascoj
Ну, собственно, позвольте мне исправить это. Соответствующая библиотека zlib (с/MT или/MTd) была необходима для * link * с соответствующим libpng. – mascoj