Код: Выделить всё
cmake_minimum_required(VERSION 3.16)
project(test LANGUAGES CXX)
add_library(cxx_opts INTERFACE)
target_compile_options(cxx_opts INTERFACE
-Wall -Wpedantic -Wextra -Werror
)
add_executable(main main.cpp)
target_link_libraries(main PRIVATE cxx_opts)
target_compile_options(main PRIVATE -Wno-unused-variable)
Код: Выделить всё
int main() {
int unused_variable{};
}
< /code>
i затем настроить этот проект и генерировать базу данных компиляции с помощью этой команды: < /p>
cmake -D CMAKE_EXPORT_COMPILE_COMMANDS=ON -S . -B build
< /code>
Если я теперь создаю этот код, я получаю ошибку: < /p>
cmake --build build
< /code>
main.cpp:2:9: error: unused variable 'unused_variable' [-Werror,-Wunused-variable]
2 | int unused_variable{};
| ^~~~~~~~~~~~~~~
Если я теперь осмотрю базу данных компиляции, сгенерированную в результате шага конфигурации (очищен от неважных вещей), я вижу, что Заказ флагов неверно :
Код: Выделить всё
[
{
"directory": "test_project/build",
"command": "c++ -Wno-unused-variable -Wall -Wpedantic -Wextra -Werror -o CMakeFiles/main.dir/main.cpp.o -c test_project/main.cpp",
"file": "test_project/main.cpp"
}
]
Если предварительно указано, содержимое будет приготовлено к собственности, а не добавляется. < / / p>
< /blockquote>
повторяющиеся вызовы для тех же элементов добавления в вызываемом порядке. < /p>
< /blockquote>
Чтобы проверить приведенный выше оператор, я активно добавил флаг -WNO-uly-viable в CXX_OPTS целевой непосредственно с теми же результатами, он все еще появляется до остальных. Итак, что-то активно переказывает флаги в результирующей команде.
Код: Выделить всё
target_compile_options(cxx_opts INTERFACE
-Wall -Wpedantic -Wextra -Werror
)
target_compile_options(cxx_opts INTERFACE -Wno-unused-variable)
< /code>
Ошибка здесь происходит на моем Mac, так что, может быть, она связана с Mac? Кто -нибудь знает, что здесь происходит и что я могу сделать, чтобы исправить порядок флагов? Вместо этого может сделать это, что должно гарантировать порядок флагов (я еще не уверен в этом на 100%): < /p>
cmake_minimum_required(VERSION 3.16)
project(test LANGUAGES CXX)
add_library(cxx_opts INTERFACE)
target_compile_options(cxx_opts INTERFACE
-Wall -Wpedantic -Wextra -Werror
)
add_library(custom_flags INTERFACE)
target_compile_options(custom_flags INTERFACE -Wno-unused-variable)
add_executable(main main.cpp)
target_link_libraries(main PRIVATE cxx_opts custom_flags)
Подробнее здесь: https://stackoverflow.com/questions/794 ... le-options
Мобильная версия