2014-12-03 3 views
0

Я пытаюсь создать libpng с помощью cmake. Для этого переменная для каталога zlib include и zlib-библиотеки передается в cmake. Пример:cmake - разная библиотека для выпуска и отладки (zlib/libpng)

cmake .. -DZLIB_LIBRARY=../../zlib-1.2.8/build/$(Configuration)/zlib.lib -DZLIB_INCLUDE_DIR=../../zlib-1.2.8/ 

, который отлично работает в выпуске сборки, но не в отладочной сборке. Он почти работает - я использую $ (Конфигурация) в пути, который будет использоваться в MS VS, либо «Debug», либо «Release» в зависимости от конфигурации. Но проблема mt в том, что zlib использует разные имена файлов в Debug & Режим выпуска. Как:

zlib.lib zlib.dll (Release)

zlibd.lib zlibd.dll (Debug)

Если я использую команду выше, он будет искать библиотеки:

../../zlib-1.2.8/build/Release/zlib.lib (Release -> работает)

../../zlib-1.2.8/build/Debug/zlib.lib (Debug -> не работает, поскольку имя файла - zlibd.lib)

Любые идеи о том, как я могу выполнять разные имена библиотек в зависимости от конфигурации с помощью cmake (я не хочу менять его в сгенерированном проекте VS)?

ответ

3

Использование optimized и debug директивы как этот

SET(LIBZ_LIB optimized ${PROJECT_SOURCE_DIR}/zlib.lib 
      debug ${PROJECT_SOURCE_DIR}/zlibd.lib) 

target_link_libraries(your-app ... ${LIBZ_LIB} 

Конечно вы должны исправить путь к файлам библиотеки.

+0

И здесь я собирался предложить генераторные выражения, но посмотрите, CMake умнее этого. более подробную информацию можно найти здесь: http://www.cmake.org/cmake/help/v3.0/command/target_link_libraries.html – IdeaHat

+0

@IdeaHat Это тоже работает, но я считаю, что это чище :) – ismail

Смежные вопросы