【问题标题】:Target Specific files with CMAKE_CXX_FLAGS使用 CMAKE_CXX_FLAGS 定位特定文件
【发布时间】:2023-03-20 16:32:01
【问题描述】:

我正在尝试对项目使用更严格的-Weffc++ 编译器标志。我遇到的问题是该项目使用了一堆开源库。这些库绝不遵守更严格的要求,我也无意修改它们以符合要求。

有没有办法使用 CMake 使用编译选项来定位一组特定的文件?

此外,编译取决于正在编译程序的内容。该程序既可以编译为可执行文件,也可以编译为库,以供所采用的自动化单元测试装置使用。

有没有办法针对使用add_subdirectory CMake 命令添加的特定子目录以及特定的编译标志?

谢谢!

【问题讨论】:

  • 根据that answer,变量CMAKE_CXX_FLAGS实际上是应用于目录的。

标签: c++ cmake compiler-warnings


【解决方案1】:

如果您可以修改所有相关目标,我建议使用target_compile_optionstarget_compile_definitions 和或/target_link_options 来实现您的目标。如果多个目标需要相同的编译器/链接器选项,您可以引入 cmake 函数。

target_compile_options(my_target PRIVATE -Weffc++)

如果你想定位一个子目录,你应该能够在一个新的范围内使用add_compile_options/add_compile_definitions/add_link_options,使用一个函数来重构设置的范围。请注意,您只需要一个函数,如果选项不能应用于添加子目录后添加到同一CMakeLists.txt 文件中的每个目标,以及添加子目录后从CMakeLists.txt 文件添加的子目录中创建的目标。无论如何,使用一个函数并不会“伤害”,甚至可能会减少您在未来编辑时需要考虑的事情的数量。

function(add_subdir_with_flags DIR)
    add_compile_options(-Weffc++)
    add_subdirectory(${DIR} ${ARGN}) # ARGN used to allow specifying the build dir for the subdir
endfunction()

...

add_subdir_with_flags(subdir1)
add_subdir_with_flags(subdir2 builddir2)

注意:如果你想深入到源文件级别,你可以通过在每个文件的基础上添加编译选项来实现,但你应该只使用这个选项,如果不是目标的所有源文件都应该是使用这些选项编译。

# apply options only to foo.cpp and bar.cpp
set_source_files_properties(foo.cpp bar.cpp PROPERTIES COMPILE_OPTIONS -Weffc++)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-14
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多