CMake: Полезные переменные

Я для себя давным давно выбрал в качестве системы сборки - cmake. Случилось так, что часть исходников, пришлось перенести на Windows-платформу и тут оказалось что cmake не такой уж кросс-платформенный. Посему было решено найти более интересные переменные, на основе которых можно было бы подстраивать поведение cmake под ту или иную платформу. Для этого я создал простенький проект и печатал переменные для каждой из интересующих меня платформ.

Собственно сам проект(CMakeLists.txt):

cmake_minimum_required (VERSION 2.8)
project(Variables)

#64-bit system
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
  set(PLATFOR_BITS 64)
else()
    set(PLATFOR_BITS 32)
endif()

set(vars
  UNIX
  WIN32
  PLATFOR_BITS
  CMAKE_CXX_COMPILER_ID
  CMAKE_COMPILER_IS_GNUCXX
  MSVC12
  CMAKE_GENERATOR
  CMAKE_SYSTEM
  CMAKE_SYSTEM_NAME
)

foreach (ivar ${vars})
 message("${ivar} == ${${ivar}}")
endforeach(ivar)

Вывод для Windows 2008 Server R2 и Visual Studio 2013 64-bit:

UNIX ==
WIN32 == 1
PLATFOR_BITS == 64
CMAKE_CXX_COMPILER_ID == MSVC
CMAKE_COMPILER_IS_GNUCXX ==
MSVC12 == 1
CMAKE_GENERATOR == Visual Studio 12 2013 Win64
CMAKE_SYSTEM == Windows-6.1
CMAKE_SYSTEM_NAME == Windows

Вывод для Windows 2008 Server R2 и Visual Studio 2013 32-bit:

UNIX ==
WIN32 == 1
PLATFOR_BITS == 32
CMAKE_CXX_COMPILER_ID == MSVC
CMAKE_COMPILER_IS_GNUCXX ==
MSVC12 == 1
CMAKE_GENERATOR == Visual Studio 12 2013
CMAKE_SYSTEM == Windows-6.1
CMAKE_SYSTEM_NAME == Windows

Вывод для Linux 64-bit:

UNIX == 1
WIN32 ==
PLATFOR_BITS == 64
CMAKE_CXX_COMPILER_ID == GNU
CMAKE_COMPILER_IS_GNUCXX == 1
MSVC12 ==
CMAKE_GENERATOR == Unix Makefiles
CMAKE_SYSTEM == Linux-3.13.0-61-generic
CMAKE_SYSTEM_NAME == Linux

Помимо всего, для Visual Studio, мне надо было отдельно слинковаться с debug и release библиотеками, я нашел выход таким образом:

SET(LINK_LIBRARY optimized Foo debug Foo_d)
target_link_libraries(MyEXE ${LINK_LIBRARY})
Почитать: