CMake: определение каталогов ссылок и библиотек для разных целей сборки - PullRequest
7 голосов
/ 30 сентября 2010

У меня есть проект VS2008 здесь. Его файлы проекта генерируются CMake. То, что я хочу сделать, это определить библиотеки и каталоги библиотек для цели Debug и Release независимо, то есть библиотеки релизов для цели релиза и библиотеки отладки для цели отладки, конечно.

Пока что я понятия не имею, как это сделать. Я знаю, что могу определять различные аргументы компилятора, например, CMAKE_CXX_FLAGS_DEBUG и CMAKE_CXX_FLAGS_RELEASE (или, тем не менее, называются цели сборки), но я понятия не имею, как это сделать для каталогов и библиотек .

Коллега, который создал файл CMakeLists со всеми определениями, попробовал его с

IF( CMAKE_BUILD_TYPE MATCHES "Debug" )

например, но это не работает. Согласно некоторым вики CMake, переменная CMAKE_BUILD_TYPE не определяется во время конфигурации, а только во время выполнения, в зависимости от того, какую цель вы используете, естественно.

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

Ответы [ 2 ]

10 голосов
/ 30 сентября 2010

Существует опция target_link_libraries, которая поможет вам сделать это.Но вам нужно будет расширить имя вашей библиотеки до полного пути.

target_link_libraries(foo
  debug c:/path/to/debug/lib/blah.lib 
  optimized c:/path/to/optimized/lib/blah.lib)

Если местоположение вашей библиотеки называется так, как это делает CMake (Debug / MinSizeRel / RelWithDebInfo / Release), вы можете использовать VS * 1005.* переменная:

link_directories(c:/path/to/all/libs/$(ConfigurationName)/)

Осторожно, $(ConfigurationName) не является переменной cmake: она будет расширена VS только на этапе сборки / компоновки.

0 голосов
/ 30 сентября 2010

Вы можете просто вызвать cmake с уже установленным набором конфигурации:

cmake -DCMAKE_BUILD_TYPE="Debug"

или что я делаю, это указать ссылку и платформу в командной строке, а затем вручную настроить тип конфигурации:

cmake -dMyConfigType="DebugStaticX86"

#CMakeLists.txt
if( ${MyConfigType} STREQUAL "DebugStaticX86" )
  set( CMAKE_BUILD_TYPE Debug )
  set( MyLinkType Static )
  set( MyPlatform x86 )
  #now include other files that set the actual compile/link options
  #depending on values of MyLinkType and MyPlatform
  ....
endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...