Ir para o conteúdo

Última atualização:2026-10-12

CMake: introdução e prática

Fundamentos essenciais do CMake (parte 1)

1. Definir as flags do compilador

Por exemplo: definir o padrão C++ e exibir todos os avisos.

set(CMAKE_CXX_FLAGS "-std=c++0x -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -Wall")
add_compile_options("$<$<STREQUAL:$<TARGET_PROPERTY:LINKER_LANGUAGE>,CXX>:-std=c++11>")

Também é possível definir algumas flags de otimização

Documentação oficial: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Por exemplo:

-O0, -O1, -O2, -O3

Se você usar LLVM, pode consultar aqui:

https://clang.llvm.org/docs/DiagnosticsReference.html

2. Definir propriedades dos arquivos-fonte

Esta é uma funcionalidade complexa do CMake: se existirem vários alvos, pode ser necessário alterar o comportamento de um deles. Por exemplo, se você quiser compilar o main.cpp usando C++11, mas compilar apenas a biblioteca em C++14, pode usar o comando set_source_files_properties para configurar as propriedades de arquivos-fonte específicos, conforme mostrado abaixo:

cmakeCopy code
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/*.cpp PROPERTIES COMPILE_FLAGS "-std=c++11")

No manual a seguir é possível consultar inúmeras propriedades, e cada uma delas pode ser usada para atender às suas necessidades específicas.

https://cmake.org/cmake/help/v3.3/manual/cmake-properties.7.html#source-file-properties

3. Flags do vinculador

A seguir está uma lista de flags do vinculador do GNU GCC.

Opções de vinculação do GNU GCC

https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

Por padrão, o vinculador do GCC pode buscar nos diretórios definidos em variáveis de ambiente (/usr/lib;/usr/local/lib) e, em seguida, vincular as bibliotecas padrão.

Uma das flags mais comuns é -l, usada para vincular as bibliotecas necessárias, como -lzlib, -lboost, entre outras.

Há outras flags adicionais que podem ajudá-lo a alterar o comportamento das opções de vinculação do executável.

Estas são as variáveis às quais você pode adicionar flags do vinculador:

  • CMAKE_EXE_LINKER_FLAGS: flags usadas pelo vinculador ao criar um executável
  • CMAKE_EXE_LINKER_FLAGS_RELEASE: flags usadas pelo vinculador ao criar um executável da versão de lançamento (release)
  • CMAKE_EXE_LINKER_FLAGS_DEBUG: flags usadas pelo vinculador ao criar um executável da versão de depuração (debug)
  • CMAKE_STATIC_LINKER_FLAGS: flags usadas ao criar uma biblioteca estática (.a, .lib)
  • CMAKE_SHARED_LINKER_FLAGS: flags usadas ao criar uma biblioteca compartilhada (.so, .dll)
  • CMAKE_MODULE_LINKER_FLAGS: flags usadas ao criar uma biblioteca de módulo

Por exemplo, você pode adicionar flags do vinculador com o seguinte código:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl")

Saber usar essas flags pode ajudá-lo a controlar melhor o comportamento de vinculação do executável.

4. Pacotes Debug e Release

Dentro do arquivo CMakeLists.txt, é possível acessar CMAKE_BUILD_TYPE. Você pode verificar facilmente o tipo de compilação no CMakeLists.txt:

if(${CMAKE_BUILD_TYPE} MATCHES Debug)
    message("Debug Build")
elseif(${CMAKE_BUILD_TYPE} MATCHES Release)
    message("Release Build")
endif()

Você também pode usar as variáveis de configuração mostradas na seção anterior para definir separadamente as flags do compilador e do vinculador para os diferentes tipos de compilação:

  • CMAKE_EXE_LINKER_FLAGS_RELEASE: flags usadas para criar executáveis da versão de lançamento (release)
  • CMAKE_EXE_LINKER_FLAGS_DEBUG: flags usadas para criar executáveis da versão de depuração (debug)
  • CMAKE_CXX_FLAGS_RELEASE
  • CMAKE_CXX_FLAGS_DEBUG

Tópicos relacionados

Comentários