Если я даю clang -O2 -O3
в той же командной строке, то в этом порядке -O3
будет переопределять -O2
? Всегда ли переопределяет аргумент более поздней версии?
Сценарий сборки, который я не могу изменить по умолчанию, добавляет -O2
, и я могу только добавлять его после него. Это приемлемая вещь?Переопределение аргументов в командной строке clang
ответ
Эксплуатация драйвера Clang описана на странице руководства Driver Design & Internals § Driver stages. Обратите внимание, как вы можете использовать опцию -###
, чтобы заставить ее сбрасывать результат каждого этапа. Это не то, что вы можете использовать с вашей системой сборки borken, так как этот параметр должен быть указан первым. Но вы можете убедиться, что водитель делает на самом деле делать то, что вы надеетесь, что это делает:
clang -### foo.cpp -O2 -O3 # dumps yayayada "-O3" yadamore
clang -### foo.cpp -O3 -O2 # dumps yayayada "-O2" yadamore
Где «болтовня» является изрыгать, что я пропустил, так как там слишком много. Итак, действительно, параметр последнего-O
, который вы указываете, является тем, который эффективен. Каково ожидаемое поведение для любого драйвера компилятора.
clang
обрабатывает варианты слева направо. Таким образом, последний вариант -O
«выигрывает». Это функция точно по той причине, о которой вы спрашиваете: есть возможность переопределить настройки по умолчанию, установленные кем-то другим (например, какая-то система сборки, разработчики программного обеспечения ...) Да, это абсолютно приемлемо, и у вас много хорошей компании ,
Конечная ссылка будет исходный код LLVM (опция обработки осуществляется cl::ParseCommandLineOptions()
в файле lib/Support/CommandLine.cpp
.)
Нестандартное мышление: даже если вы не можете изменения сборки сценария, вы можете влияние это делать то, что вы хотите. Например, параметр оптимизации может быть частью переменной, взятой из опции или из среды. Например, если сборка использует Makefile
, переменная может быть названа CFLAGS
или COPTS
и установить с
make CFLAGS=-O3
Если сборка использует скрипт, может быть что-то вроде
CFLAGS="-O3" ./configure
будет работать. Там не видно, не видя сборки.
- 1. Расчет аргументов в командной строке
- 2. Передача аргументов в командной строке TCL
- 3. Передача нескольких аргументов в командной строке арг
- 4. Компиляция нескольких файлов Objective-C в командной строке с clang
- 5. как передать список аргументов командной строке VM
- 6. Почему Clang не может найти библиотеку, указанную в командной строке?
- 7. Сделать модуль LLVM ModulePass доступным в командной строке clang
- 8. Дата в командной строке
- 9. Как передать массив аргументов в cURL в командной строке?
- 10. Передача аргументов в командной строке при нажатии кнопки в C#
- 11. Передача аргументов в javascript через cscript в командной строке
- 12. Безопасное устранение аргументов в командной строке в C#
- 13. Передача аргументов в командной строке Unix при использовании | symble
- 14. В командной строке PuTTY принимают несколько аргументов файла?
- 15. Команда rsync принимает не более 2 аргументов в командной строке
- 16. Рекомендуемые параметры командной строки Clang
- 17. перенаправление ввода в командной строке
- 18. Обработка командной строки и аргументов
- 19. Основы аргументов командной строки, Python
- 20. Бесконечное количество аргументов командной строки в Python
- 21. F # Файл в командной строке?
- 22. аргументов командной строки с Makefile
- 23. Сравнение аргументов командной строки C++
- 24. Что делает аргумент командной строки -lcs50 в clang?
- 25. Передача аргументов командной строке с каталогами, имеющими пробелы
- 26. Обработка аргументов командной строки
- 27. Передача аргументов командной строки
- 28. Скрытие аргументов командной строки
- 29. аргументов командной строки массив
- 30. Несколько аргументов командной строки