Синтаксис опций компиляции GCC - PullRequest
0 голосов
/ 18 ноября 2011

Я пытаюсь получить мою программу. Я хочу построчное профилирование. Тем не менее, я не могу понять синтаксис правильно. Я использую «make», а не «gcc», поэтому, пожалуйста, помогите только с предложениями, которые соответствуют make. Я был бы очень признателен, если бы вы могли дать мне полный синтаксис "make". На основании этого сайта: http://sourceware.org/binutils/docs/gprof/Output-Options.html[^] http://sourceware.org/binutils/docs/gprof/Line_002dby_002dline.html[^] Вот что я ввожу:

make USE_LOCAL_HEADERS=0 LDFLAGS='-L.' BASE_CFLAGS=-m32 CFLAGS='-fopenmp -pg -l -g'

Вывод:

/usr/bin/ld: cannot find -l-g
collect2: ld returned 1 exit status
make[2]: *** [build/release-linux-ppc64/ioquake3.ppc64] Error 1
make[2]: Leaving directory `/r/home7/yasir/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_clean'
make[1]: *** [targets] Error 2
make[1]: Leaving directory `/r/home7/yasir/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_clean'
make: *** [release] Error 2

Мне нужны опции "-l", "-g" и "-pg".

Ответы [ 3 ]

3 голосов
/ 18 ноября 2011

-pg включает профилирование, -g включает имена символов, которые помогают интерпретировать сгенерированный профиль.

Параметр -pg необходимо передать компилятору и компоновщику.

Команда -l не имеет смысла в том виде, в котором вы ее используете, так как ей нужно имя библиотеки в качестве параметра, поэтому, пока вы ее не предоставите, оставьте -l в стороне.

Также во время разработки я бы рекомендовал опцию -Wall, чтобы включить все предупреждения во время компиляции.

Так что вы можете попробовать эту команду make:

make USE_LOCAL_HEADERS=0 LDFLAGS='-L. -pg' BASE_CFLAGS=-m32 CFLAGS='-fopenmp -pg -g -Wall'
1 голос
/ 18 ноября 2011

Вы можете передать большинство из них как переменные окружения, заставить «should» делать правильные вещи и использовать их для компилятора:

$ USE_LOCAL_HEADERS=0 \
LDFLAGS='-L.' \
BASE_CFLAGS=-m32 \
CFLAGS='-fopenmp -pg -g' \
make

Это будет USE_LOCAL_HEADERS, LDFLAGS, BASE_CFLAGS и CFLAGS в качестве переменных окружения, которыеmake и gcc могут видетьВозможно, вам придется отредактировать ваш Makefile, чтобы объединить их правильными способами для того, что вы хотите.

0 голосов
/ 18 ноября 2011

make - это просто «автоматическое определение частей большой программы, которые необходимо перекомпилировать, и выдача команд для их перекомпиляции» ( man make ). Похоже, make не может понять ваши аргументы; на самом деле он не может запускать какие-либо команды, пока не обнаружит ошибку.

Извините, я не могу вам больше помочь, но ваша проблема в вашем файле make или аналогичном. Вы должны прочитать о том, что такое make-файл и как gprof вашей программы, понять разницу между make и gcc, и пересмотреть то, что вы пытаетесь сделать. Сделать не может быть полезным для вас.

...