Настройка команд компилятора CMake для учета странностей - PullRequest
2 голосов
/ 29 февраля 2020

Я работаю со сторонней модифицированной версией clang 7.0.0, которая захватила опцию -c, заменив ее флагом -ccdsp по ... причинам ...

Это создало две проблемы для CMake:

  1. Опция -ccdsp, по-видимому, должна быть самой первой опцией clang, прежде всего включая параметры -D... и -I.... Существует модификатор BEFORE для target_compile_options, который я могу использовать, чтобы убедиться, что он появляется в начале списка опций, но, похоже, я не контролирую порядок не-опций, таких как определения и include- пути, в результате чего -ccdsp встречается позже в общем наборе параметров. Я не смог найти способ убедиться, что это самый первый вариант с использованием современных методов CMake. Вместо этого мне пришлось прибегнуть к явной установке CMAKE_CXX_FLAGS.

  2. Теперь, когда опция -c для указания исходного файла больше не доступна, мне нужно найти способ получить CMake, чтобы опустить его. Оказывается, что, насколько я могу судить, этот флаг на самом деле не требуется, поскольку clang -c foo.cpp -o foo.o и clang foo.cpp -o foo.o, по-видимому, делают одно и то же. Поэтому мне нужен способ, чтобы CMake отбросил опцию -c.

Я понимаю, что это необычный вопрос, и это ситуация, полностью созданная организацией, которая предоставила модифицированную версию лязг К сожалению, мои запросы поддержки к ним остаются (на сегодняшний день) без ответа.

Кто-нибудь знает, как я могу обойти эту проблему? Могу ли я создать собственный обработчик компилятора в CMake на основе clang, куда я добавляю -ccdsp и каким-то образом удаляю -c?

1 Ответ

3 голосов
/ 29 февраля 2020

В CMake командная строка компилятора указана в переменной CMAKE_ _COMPILE_OBJECT .

Вы можете установить эту переменную в отдельном файле:

my_clang_override.cmake :

set(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> -ccdsp <FLAGS> -o <OBJECT>")

и включите этот файл в CMakeLists.txt проекта, указав переменную CMAKE_USER_MAKE_RULES_OVERRIDE одним из двух способов:

  1. Укажите переменную в самом CMakeLists.txt, до project() вызове:

    CMakeLists.txt :

     # Assume file 'my_clang_override.cmake' to be in the project's source directory.
     set(CMAKE_USER_MAKE_RULES_OVERRIDE "my_clang_override.cmake")
    
  2. Передайте настройку переменной в cmake при настройке проекта:

    cmake -DCMAKE_USER_MAKE_RULES_OVERRIDE=<path/to/my_clang_override.cmake> <other-parameters>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...