2016-03-31 2 views
0

Моя проблема кажется довольно простой: я хотел бы иметь возможность создать простую программу с простым графическим интерфейсом для окон в C (и, если возможно, в окнах). Мое текущее окружение - это eclipse IDE, msys2 с toolchain mingw64 на окнах 10. Я хотел бы использовать pkg-config с eclipse, чтобы избежать «жесткого кодирования» всех моих библиотек, и для этого я сначала попробовал плагин pkg-config для eclipse (он падает, когда я создаю новый проект, исключение null-указателя). Затем я попытался вставить команду pkg-config в вызов GCC. Для этого мне пришлось использовать powershell, потому что cmd этого не допускает. Но даже в powershell я не могу использовать его, потому что строка, которую возвращает pkg-config, рассматривается gcc как команда. Вот что затмение использует для компиляции:Кодирование простого графического интерфейса GTK на окнах в C с eclipse

powershell gcc -O0 -g3 -Wall -c -fmessage-length=0 --std=c99 $(pkg-config-win --cflags --libs gtk+-3.0) -o main.o "..\\main.c" 

И вот что она возвращает меня:

gcc.exe: error: unrecognized command line option '-mms-bitfields -pthread -mms-bitfields -IC:/msys64/mingw64/include/gtk-3.0 [...]' 

Затем я попытался удалить --cflags из PKG-конфигурации: команды, используемое затмение :

powershell gcc $(pkg-config-win --libs gtk+-3.0) -o Test.exe main.o -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -lwinmm -ldwmapi -lz -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl 

И вот результат (8 раз в той же строке).

gcc.exe: error: .0: No such file or directory 

Я пробовал десятки разных вещей, но никто из них не работает.

Так что мои основные вопросы:

  1. Есть простой способ решить эту проблему?
  2. Я делаю правильные вещи (это затмение, чтобы сделать такие вещи?)
  3. Если нет, что мне делать? (Изменить IDE? Изменить библиотеку графического интерфейса, ...)

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

+0

Это звучит как-то причиняет весь ' pkg-config', который рассматривается как один длинный аргумент вместо нескольких аргументов, разделенных пробелами. Я не уверен, что в этом есть проблема ... что-то в Eclipse? – andlabs

+0

Я не знаю, действительно ли это связано с затмением. Вот команда, введенная в powershell: gcc -O0 -g3 -Wall -c -fmessage-length = 0 -std = c99 $ (p .o ".. \\ main.c" И вот результат: gcc.exe: ошибка: непризнанная опция командной строки '-mms-bitfields -pthread [...]' Итак, кажется, что затмение передает команды на консоль и возвращает ответ на дисплей. – DrCampy

+0

это проблема PowerShell? Почему PowerShell рассматривает замену '$ (...)' как единственного аргумента? – andlabs

ответ

0
So my main questions are: 
    1.Is there a simple way to solve this problem? 

Да,

Хотя это старый вопрос, заслуживает ответа. Проблема, как правильно отмечено в комментариях, - вывод $(pkg-config-win --cflags --libs gtk+-3.0) возвращается как одна длинная строка, а gcc не распознает ее. Чтобы решить проблему, вы можете просто назначить вывод pkg-config в качестве массива и использовать переменную массива с gcc, например.

PS> [string[]] $cflags = $(pkg-config-win --cflags --libs gtk+-3.0) 
PS> gcc -O0 -g3 -Wall -c -fmessage-length=0 --std=c99 $cflags -o main.o ..\main.c 

gcc будет видеть каждый вариант, содержащийся в $cflags в качестве отдельного аргумента (цитирование автоматически обрабатывается так встроенной '-' и '.' не вызывают проблем в PowerShell)