Как перезаписать настройки из модулей cmake из файла toolchain? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть файл CMake Toolchain, который кросс-компилируется для arm-linux на хосте x86_64-linux.Во время настройки мой инструментальный файл анализируется, и он (правильно) находит компилятор GNU.Поэтому он будет загружать GNU.cmake (в моем случае /usr/share/cmake-3.10/Modules/Compiler/GNU.cmake).Для меня непонятна иерархия включений (не могу найти документацию. Любая ссылка доступна).Однако это выглядит так:

  • root CMakeLists.txt до project()
  • my toolchain.cmake
  • материал в модулях dir (включая GNU.cmake)
  • загружает %_INIT переменных в % Переменные кэша
  • продолжить после project()

Скажите, что я хочу, чтобы эта цель строилась только с оптимизацией -O2.Я установил его в своем наборе инструментов, потому что он является глобальным для многих проектов.

set(CMAKE_CXX_FLAGS_RELEASE_INIT "-O2")

, но затем загружается GNU.cmake и добавляет его с "-O3".Поэтому мои настройки перезаписываются.После этого я могу перезаписать его только в моих проектах CMakeLists.txt файлов.Я должен был бы сделать это для каждого проекта, и разработчики упустят это!

Итак, мой вопрос (повторяя заголовок): Как перезаписать настройки из модулей CMake из файла toolchain?

1 Ответ

0 голосов
/ 23 декабря 2018

По указанным вами причинам вы не можете этого сделать.Возможно, это можно считать ограничением файлов цепочки инструментов, но именно так оно и работает в настоящее время.

Теперь копаемся в модулях, модуль, который загружает GNU.cmake, равен CMakeCInformation.cmake и CMakeCXXInformation.cmake.

Возможно, можно переопределить эти настройки, используя другой файл, который загружается после GNU.cmake, используя переменную CMAKE_USER_MAKE_RULES_OVERRIDE_<lang>.Я нашел это старое электронное письмо, в котором говорится об этом: https://cmake.org/pipermail/cmake/2008-April/021337.html

Здесь также упоминается: https://cmake.org/cmake/help/latest/variable/CMAKE_USER_MAKE_RULES_OVERRIDE.html?highlight=cmake_user_make_rules_override

Итак, вы можете изменить значение, выполнив что-то подобное изв этом файле переопределения:

string(REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE_INIT ${CMAKE_CXX_FLAGS_RELEASE_INIT })

Я никогда раньше не слышал об этих переменных, поэтому я не совсем уверен, как они работают в отношении местоположений путей при установке CMAKE_USER_MAKE_RULES_OVERRIDE_<lang>.

Я подозреваючто вы можете установить CMAKE_USER_MAKE_RULES_OVERRIDE_<lang> из файла набора инструментов вместо CMakeLists.txt файла.

...