Sean Bone
Sean Bone

Reputation: 3546

Adding global compile flags in CMake

I am editing a CMakeLists.txt file made by someone else. I'm trying to get rid of some of the warnings generated when compiling the project.

Normally I just add set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_FLAGS}") with whatever flags I need to add, and it works fine, but for this project, it's just not working. The warnings still appear. I tried a couple alternative methods, but nothing.

What could be causing the issue?

cmake_minimum_required(VERSION 3.1)
project(PBS)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

option(LIBIGL_USE_STATIC_LIBRARY "Use libigl as static library" OFF)
option(LIBIGL_WITH_ANTTWEAKBAR       "Use AntTweakBar"    OFF)
option(LIBIGL_WITH_CGAL              "Use CGAL"           OFF)
option(LIBIGL_WITH_COMISO            "Use CoMiso"         OFF)
option(LIBIGL_WITH_CORK              "Use Cork"           OFF)
option(LIBIGL_WITH_EMBREE            "Use Embree"         OFF)
option(LIBIGL_WITH_LIM               "Use LIM"            OFF)
option(LIBIGL_WITH_MATLAB            "Use Matlab"         OFF)
option(LIBIGL_WITH_MOSEK             "Use MOSEK"          OFF)
option(LIBIGL_WITH_OPENGL            "Use OpenGL"         ON)
option(LIBIGL_WITH_OPENGL_GLFW       "Use GLFW"           ON)
option(LIBIGL_WITH_OPENGL_GLFW_IMGUI "Use ImGui"          ON)
option(LIBIGL_WITH_PNG               "Use PNG"            OFF)
option(LIBIGL_WITH_PYTHON            "Use Python"         OFF)
option(LIBIGL_WITH_TETGEN            "Use Tetgen"         OFF)
option(LIBIGL_WITH_TRIANGLE          "Use Triangle"       OFF)
option(LIBIGL_WITH_VIEWER            "Use OpenGL viewer"  ON)
option(LIBIGL_WITH_XML               "Use XML"            OFF)

if (NOT LIBIGL_FOUND)
    find_package(LIBIGL REQUIRED QUIET)
endif()

add_subdirectory(0_dummy)
add_subdirectory(1_cannonball)
add_subdirectory(2_spring)
add_subdirectory(3_spinning)
add_subdirectory(4_gyro)


# Custom commands
set( CMAKE_EXPORT_COMPILE_COMMANDS ON )
add_compile_options ( -Wno-reorder )
add_definitions ( -Wno-unknown-pragmas )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-sign-compare")

EDIT: I found out that adding the flags in one of the subdirectories works for that subdirectory (e.g. in 3_spinning/CMakeLists.txt). Is there no way of setting the flags globally?

Upvotes: 7

Views: 14897

Answers (2)

Sean Bone
Sean Bone

Reputation: 3546

Conclusion: add_compile_options and add_definitions work on the current directory and all included directories that are included after the command. Setting CMAKE_CXX_FLAGS, however, seems to only work on the current directory. Not sure why however, because as commenter Tsyvarev says, it should have the same scope as the first two methods.

Basically, shifting the lines around like this:

[...]
# Custom commands
add_compile_options ( -Wno-reorder )
add_definitions ( -Wno-unknown-pragmas )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-sign-compare")

add_subdirectory(0_dummy)
add_subdirectory(1_cannonball)
add_subdirectory(2_spring)
add_subdirectory(3_spinning)
add_subdirectory(4_gyro)

I no longer get -Wreorder and -Wunknown-pragmas warnings, but I still get -Wsign-compare warnings.

Upvotes: 3

Matthieu Brucher
Matthieu Brucher

Reputation: 22023

You are adding the flags at the end, after scanning the subfolder, you have to first set the flags and then go through your subfolders.

Upvotes: 2

Related Questions