world txt tutorial not make hello found cmakelists c++ cmake

c++ - txt - ¿CXX_FLAGS condicional usando cmake basado en compilador?



cmake windows tutorial (1)

Acabo de comenzar a usar CMake para algunos proyectos personales y escolares, y me he quedado atascado por un problema menor.

Digamos que estoy tratando de obtener un programa de C ++ compilando bajo varios compiladores (g ++, cl y bcc32 en este caso). Tengo diferentes interruptores de línea de comando para cada compilador, y lo que intentaba hacer era básicamente crear un directorio gnu / ms / borland y crear cosas CMake allí (ingresando a los directorios y haciendo un cmake -DCMAKE_CXX_COMPILER=g++ .. en el gnu, directorio, por ejemplo).

En el CMakeLists.txt en el directorio de nivel superior, intenté hacer algo como:

if(CMAKE_CXX_COMPILER STREQUAL g++) set(CMAKE_CXX_FLAGS "-Wextra -Wall -ansi -pedantic")

Y así sucesivamente con elsifs para los otros compiladores, pero esto no parece funcionar correctamente, deja caer CXXFLAGS completo. La línea funciona si hago que el archivo sea completamente incondicional (es decir, simplemente asuma g ++ y use las banderas g ++).

¿Qué estoy haciendo mal aquí, o hay una mejor manera de manejar este tipo de problema?


Hay un montón de variables CMake predefinidas dependiendo del compilador que estés usando:

if (MSVC) set ( CMAKE_CXX_FLAGS "/GLOBAL_FLAGS_GO_HERE") set ( CMAKE_CXX_FLAGS_DEBUG "/DEBUG_FLAGSS_GO_HERE") set ( CMAKE_CXX_FLAGS_RELEASE "/RELEASE_FLAGS_GO_HERE" ) endif () if (BORLAND) set ( CMAKE_CXX_FLAGS "/GLOBAL_FLAGS_GO_HERE") set ( CMAKE_CXX_FLAGS_DEBUG "/DEBUG_FLAGS_GO_HERE") set ( CMAKE_CXX_FLAGS_RELEASE "/RELEASE_FLAGS_GO_HERE" ) endif () if (CMAKE_COMPILER_IS_GNUCXX) set ( CMAKE_CXX_FLAGS "/GLOBAL_FLAGS_GO_HERE") set ( CMAKE_CXX_FLAGS_DEBUG "/DEBUG_FLAGS_GO_HERE") set ( CMAKE_CXX_FLAGS_RELEASE "/RELEASE_FLAGS_GO_HERE" ) endif ()

Si desea que las opciones del compilador se anulen y persistan en el CMakeCache generado:

if (CMAKE_COMPILER_IS_GNUCXX) set ( CMAKE_CXX_FLAGS "/GLOBAL_FLAGS_GO_HERE" CACHE STRING "g++ Compiler Flags for All Builds" FORCE) set ( CMAKE_CXX_FLAGS_DEBUG "/DEBUG_FLAGS_GO_HERE" CACHE STRING "g++ Compiler Flags for Debug Builds" FORCE) set ( CMAKE_CXX_FLAGS_RELEASE "/RELEASE_FLAGS_GO_HERE" CACHE STRING "g++ Compiler Flags for Release Builds" FORCE) endif ()