在 CMake 中添加全局编译标志

Adding global compile flags in CMake

本文关键字:编译 标志 全局 添加 CMake      更新时间:2023-10-16

我正在编辑其他人制作的CMakeLists.txt文件。我正在尝试摆脱编译项目时生成的一些警告。

通常我只是添加set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_FLAGS}")我需要添加的任何标志,它工作正常,但对于这个项目,它只是不起作用。警告仍然出现。我尝试了几种替代方法,但什么都没有。

可能导致此问题的原因是什么?

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")

编辑:我发现在其中一个子目录中添加标志适用于该子目录(例如在3_spinning/CMakeLists.txt中(。没有办法在全球范围内设置标志吗?

结论:add_compile_optionsadd_definitions处理当前目录以及命令后包含的所有目录。但是,设置CMAKE_CXX_FLAGS似乎仅适用于当前目录。但是不知道为什么,因为正如评论者Tsyvarev所说,它应该与前两种方法具有相同的范围。

基本上,像这样移动线条:

[...]
# 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)

我不再收到-Wreorder-Wunknown-pragmas警告,但我仍然收到-Wsign-compare警告。

您在最后添加标志,扫描子文件夹后,您必须首先设置标志,然后浏览您的子文件夹。