Я читаю «Основы GTK +» и при этом решил написать простой make-файл, который позволил бы мне запустить «make» для компиляции примерной программы, которую я только что написал. Я также наткнулся на список директив компилятора here, который указанная команда Gnome поможет перейти с GTK2 на GTK3, поэтому я хотел включить их.дополнительные CFLAG с Makefile
Я заставлю нуб для всех намерений и целей, так это то, что я придумал:
CC = gcc
CFLAGS += -Wall
GTK_DFLAGS = -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE
GTK_CFLAGS = $(shell pkg-config --cflags gtk+-3.0)
GTK_LDFLAGS = $(shell pkg-config --libs gtk+-3.0)
%.o: %.c
$(CC) $(CFLAGS) $(GTK_DFLAGS) $(GTK_CFLAGS) -c -o [email protected] $<
%: %.o
$(CC) $(CFLAGS) $(GTK_DFLAGS) $(GTK_CFLAGS) $(GTK_LDFLAGS) -o [email protected] $<
.PHONY: clean
clean:
rm -f *.o *~
И как вы можете догадаться, это не работает достаточно хорошо. Я знаю, что запуск pkg-config изнутри make-файла не является идеальным решением, но это для моих небольших проектов обучения, а не для развертывания любого типа. Тем не менее, выход мне странный; кажется, что просто игнорирует любые переменные после CFLAGS.
Что-то вроде:
[[email protected] ch2]$ make helloworld
gcc -Wall helloworld.c -o helloworld
helloworld.c:1:21: fatal error: gtk/gtk.h: No such file or directory
#include <gtk/gtk.h>
^
compilation terminated.
<builtin>: recipe for target 'helloworld' failed
make: *** [helloworld] Error 1
Если добавить есть содержимое GTK_DFLAGS просто пришитые к концу CFLAGS, они появляются в командной строке, но переменные PKG-конфигурации по-прежнему отсутствует.
Для меня очевидно, что я испортил что-то простое, но через час смутно сформулированного Googling, я свеж от идей относительно того, что это такое.
Кроме того, я был бы счастлив иметь что-нибудь _else_ Я делаю неправильно указано. =) – musasabi
Я не вижу никаких явных ошибок с головы. Я бы рекомендовал использовать ': =' вместо '=' в строках с '$ (shell ...)'. Ошибка в этом случае приводит только к дополнительным вызовам 'pkg-config', что является проблемой только во время' make'. Не главная причина того, что вызывает эту проблему. –
Ага ... Я вижу, что происходит. Ваша главная цель - «helloworld», и вы ее компилируете непосредственно из файла 'helloworld.c', а не связываете файл' helloworld.o'. Какова ваша цель «helloworld»? –