Я начинаю учить себя немного C ++ в эти выходные, и я решил изучить некоторое программирование GUI тем временем. Дело в том, что он просто не будет компилироваться, либо с использованием GTK (комплектация Windows 3.6.4) или wxWidgets (3.0.0). Ошибка, которую я получаю, одинакова для обоих, поэтому я придерживаюсь GTK + для этого вопроса.
Через 5 дней (7 перекомпиляций wx, много уроков, ТАК вопросы и гугл), вот как я пытаюсь скомпилировать код (Я нахожусь под Windows 7, 64 бита, и сейчас нет возможности переключиться на Linux):
@echo off
set cygpath=C:\Cygwin\bin
set filename=simple
%cygpath%\bash.exe -c "gcc $(pkg-config --cflags gtk+-3.0) -o %filename% %filename%.c $(pkg-config --libs gtk+-3.0)"
echo.
pause
Но единственный вывод, который я получаю, это (обратные ходы вместо $()
возвращает тоже самое)
: Invalid argument
: Invalid argument
Сначала я попробовал то же самое без Cygwin, но результаты были:
gcc: error: $(pkg-config: No such file or directory
gcc: error: gtk+-3.0): No such file or directory
gcc: error: $(pkg-config: No such file or directory
gcc: error: gtk+-3.0): No such file or directory
gcc: error: unrecognized command line option '--cflags'
gcc: error: unrecognized command line option '--libs'
Использование кавычек или двойных кавычек не помогло вообще. Я пробовал все это как в cygwin-bash, так и в приглашении Windwos
Я совершенно новичок в C ++, wxWidgets и GTK +, и я уже видел этот, но поскольку это не решило мою проблему, и я не могу комментировать из-за своей репутации, я подумал, что должен открыть новый вопрос.
Также я изменил компилятор на TDM-GCC потому что я не мог скомпилировать wx с MinGW. Это как-то связано? Что мне здесь не хватает?
Заранее благодарю за любую помощь.
РЕДАКТИРОВАТЬИзвините, только что понял, что образец написан на C, а не на C ++. Я добавляю тег сейчас. (Однако ошибка та же, что и в коде C ++, который я использую для wx, поэтому я сохраняю тег C ++.)
Это НЕ проблема GCC. Это проблема сценариев / shell / bash / environment.
gcc: error: $(pkg-config: No such file or directory
Эта строка обозначает, что «GCC» увидел $(pkg-config
где ожидалось имя файла; Приложения Linux ожидают, что подстановка командной строки будет выполнена для них оболочкой, вызывающей их.
Это означает, что оболочка не потребляет $(pkg-config --cflags gtk+-3.0)
и выполнить замену на нем.
Возможно, вы захотите попробовать создать bash-скрипт gtkcc.sh, который сделает это за вас и вставит соответствующие параметры в соответствующие места.
#!/bin/bash
# usage: gtkcc.sh <filename>
filename="$1"; shift
if [ -z "${filename}" ]; then echo "Usage: $0 <filename>"; exit 255; fi
if [ ! -f "${filename}.c" ]; then echo "Cannot find ${filename}.c"; exit 255; fi
gtkCFLAGS="$(pkg-config --cflags gtk+-3.0)"gtkLDFLAGS="$(pkg-config --libs gtk+-3.0)"
cmd="gcc ${gtkCFLAGS} -o \"${filename}\" \"${filename}.c\" ${gtkLDFLAGS}"echo $cmd >${TMP}/gtkcc.log
eval $cmd
Сохранить как gtkcc.sh или gtkcc, chmod a+rx gtkcc.sh
Измените свой файл bat, чтобы вызвать:
%cygpath%\bash.exe gtkcc.sh %filename%
Если это не работает, запустите bash и обратитесь к $ {TMP} /gtkcc.log, в противном случае вы можете закомментировать строку эха.
Других решений пока нет …