Skip to content
Blog
Go back

CMakeにおける警告オプションの順序

  • cmakeで警告オプションをまとめたINTERFACEライブラリを作って、それをリンクする場合、一部のオブションが-Wno-*で正しく無効化されないことがあった
  • target_link_librariesでINTERFACEライブラリをリンクした場合、そのオプションは最後尾に追記されるので、-Wall -Wextraがフラグを上書きしてしまっていたのが原因らしい
  • target_compile_optionsBEFOREキーワードがこれを解決できる機能のように見えるけど、同じライブラリ内でしか機能しないようだった
# ここでBEFOREを付けてもfooでは効果がなかった
add_library(config INTERFACE)
target_compile_options(config BEFORE INTERFACE -Wall -Wextra) 

# `-Wno-unused-parameter -Wall -Wextra`の順となって、
# `-Wunused-parameter`が再び有効化されてしまう
add_library(foo)
target_compile_options(foo PRIVATE -Wno-unused-parameter) target_link_libraries(foo PRIVATE config)
  • とりあえず、リストの最前列に-Wall -Wextraをねじ込ませることで解決できた
    • ただし、これだと、問答無用ですべてのビルドに適用されてしまう
# オプションリストの既定値に警告オプションをねじ込ませる
string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra")
string(APPEND CMAKE_C_FLAGS " -Wall -Wextra")

何を間違えていて、どう解決すべきなのか、結局のところ、良く分かっていません。

参考資料#