Новичок - не могу скомпилировать цель c с помощью GNUStep

У меня есть вопрос по этому вопросу Невозможно скомпилировать Objective C с помощью Gnustep для windows

Я пытаюсь скомпилировать свое первое приложение с целью c в Windows. Это файл hello.m (все файлы ниже созданы в Visual Studio)

#import <../Program Files/GNUstep/System/Library/Headers/Foundation/Foundation.h>

int main(int argc, const char* argv[])
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"Hello from Hello.m!");

    [pool release];
    return 0;
}

Чтобы скомпилировать его, у меня есть файл GNUmakefile в том же каталоге:

include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = hello
YourProg_OBJC_FILES = hello.m
include $(GNUSTEP_MAKEFILES)/tool.make

Насколько я понимаю, когда я запускаю make, будет выполнена команда "make" GNUmakefile.

Когда я делаю это в оболочке GNUStep, я получаю сообщение об ошибке

GNUmakefile:1 *** missing separator. Stop.

Я попытался добавить вкладку в первую строку. Это ничего не дало. Да, я уверен, что это была табуляция, а не пробел.


person Petras    schedule 23.01.2011    source источник
comment
Кстати, ваш #include <../blah> будет работать? Я привык к C, требующему #include "../blah" для путей относительно источника.   -  person sarnold    schedule 23.01.2011
comment
@sarnold это может сработать, а может и не сработать. Разница между и ‹› в том, где начинается поиск включаемых заголовков. относится к источникам проекта и ‹› обычно начинается с определенных в системе путей включения.   -  person MKroehnert    schedule 18.02.2011


Ответы (4)


У меня такая же проблема. Я использовал Notepad ++ для создания файла GNUmakefile. Моя кодировка по умолчанию в Notepad ++ - UTF8. Но make.exe из MINGW32, похоже, ожидает файл с кодировкой ANSI.

Итак, проверьте, закодирован ли ваш файл с помощью ANSI.

person Balmat    schedule 18.07.2012

make жалуется на ваш make-файл, так что у вас, вероятно, где-то есть синтаксическая ошибка.

См .: http://www.gnu.org/software/automake/manual/make/Error-Messages.html:

Это означает, что программа make ничего не понимает в только что прочитанной строке make-файла. GNU make ищет различные разделители (:, =, символы префикса рецепта и т. Д.), Чтобы указать, какую строку он анализирует. Это сообщение означает, что не удалось найти действительный.

Попробуйте скомпилировать напрямую:

gcc -o hello hello.m -I/c/GNUstep/GNUstep/System/Library/Headers \
    -L /c/GNUstep/GNUstep/System/Library/Libraries -lobjc -lgnustep-base \
    -fconstant-string-class=NSConstantString
person Seth    schedule 23.01.2011
comment
обычно лучше использовать gnustep-config для установки большинства необходимых флагов компиляции, как показано здесь: stackoverflow.com/questions/3538051/ - person MKroehnert; 18.02.2011

вам никогда не нужно указывать полный путь к заголовочному файлу Foundation.h. Всегда должно быть #import <Foundation/Foundation.h>.

Это вместе с проблемой с вашим файлом makefile указывает на то, что что-то неправильно настроено на вашем компьютере. Вы запускали команду make из оболочки msys или из командной строки Windows? Если вы решили использовать командную строку Windows, вы столкнетесь с некоторыми проблемами, потому что среда там неправильно настроена в отличие от оболочки msys, поставляемой с установщиком GNUstep.

С другой стороны, если вы хотите запустить gcc вручную, вы можете взглянуть на этот ТАК ответ.

person MKroehnert    schedule 18.02.2011

В вашем GNUmakefile, YourProg_OBJC_FILES следует изменить на hello_OBJC_FILES, как показано ниже.

include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = hello
hello_OBJC_FILES = hello.m
include $(GNUSTEP_MAKEFILES)/tool.make

Или вы также можете просто скомпилировать в командной строке следующим образом

$ gcc `gnustep-config --objc-flags` hello.m -o hello `gnustep-config --base-libs`

Команда gnustep-config, такая как pkg-config, может распечатать параметры компиляции и связывания для gcc.

person Yantao Xie    schedule 12.09.2012