- cmakeで警告オプションをまとめたINTERFACEライブラリを作って、それをリンクする場合、一部のオブションが
-Wno-*で正しく無効化されないことがあった target_link_librariesでINTERFACEライブラリをリンクした場合、そのオプションは最後尾に追記されるので、-Wall -Wextraがフラグを上書きしてしまっていたのが原因らしいtarget_compile_optionsのBEFOREキーワードがこれを解決できる機能のように見えるけど、同じライブラリ内でしか機能しないようだった
# ここで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")何を間違えていて、どう解決すべきなのか、結局のところ、良く分かっていません。