В эти выходные я начинаю немного учиться C++, и в то же время я решил изучить некоторые программы графического интерфейса. Дело в том, что он просто не будет компилироваться, используя GTK (пакет Windows 3.6.4) или wxWidgets (3.0.0). Ошибка, которую я получаю, аналогична для обоих, поэтому я придерживаюсь GTK+ для этого вопроса.
Через 5 дней (7 перекомпиляций wx, много учебников, вопросов SO и google), вот как я пытаюсь скомпилировать код (я под 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
Но единственным результатом я получаю это (backtilts вместо $()
возвращает то же самое):
: 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. Это связано? Что мне здесь не хватает?
Заранее благодарю за любую помощь.
EDIT: Извините, просто понял, что образец был написан на C, а не C++. Я добавляю тег сейчас. (Тем не менее, ошибка совпадает с кодом C++, который я использую для wx, поэтому я сохраняю тег C++.)
Это НЕ проблема gcc. Это проблема сценариев/оболочки /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, иначе вы можете прокомментировать эхо-строку.
: Invalid argument
. Я также попробовал ваше предложение, и оно не сработало, выдавая теперь : No such file or directoryash gtkcc.sh: line 2: $'\r': command not found gtkcc.sh: line 4: $'shift\r': command not found gtkcc.sh: line 14: syntax error: unexpected end of file
dos2unix gtkcc.sh
файла Unix файл dos2unix gtkcc.sh
. stackoverflow.com/questions/11616835/… Другим вариантом может стать привычка использовать что-то вроде Notepad ++ (который позволит вам указать режим окончания строки), а не блокнот.
cmd.exe
не выполняет подстановку встроенных переменных в строках. (Гуру Windows, пожалуйста, подтвердите или опровергните это.)cmd
пишется%LIKE_THIS%
не$(LIKE_THIS)
.