Компиляция на Windows и Mac с помощью Autotool - PullRequest
2 голосов
/ 14 сентября 2010

У меня проблема при попытке использовать автоинструменты для простого надуманного проекта, задача проста: использовать Objective-C на Mac OSX и C ++ на Windows (mingw) - с небольшим количеством клея C в середине.

Проект структурирован следующим образом (за исключением всех автоматически сгенерированных файлов):

    ./aclocal.m4
    ./configure
    ./configure.ac
    ./Makefile.am
    ./src/darwin/greet.m
    ./src/greet.h
    ./src/main.cpp
    ./src/Makefile.am
    ./src/mingw32/greet.cpp    

Содержимое файлов ключей находится здесь на github в сущности ,(не хотел спамить здесь)

Я использую следующую команду между изменениями:

$ autoreconf -vis && ./configure && make

Полученная ошибка - полный вывод ( здесь вдругой смысл ):

....
Making all in src
g++  -g -O2   -o greetings main.o  
Undefined symbols:
  "greet()", referenced from:
      _main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[1]: *** [greetings] Error 1
make: *** [all-recursive] Error 1

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

Из документов я понял, что EXTRA_progname_SOURCES должен содержать все возможные файлы, и что устанавливаемые условия должны работать для выбора правильного

К сожалению, я не думаю, что мои make-файлы переделываются, потому что даже когда я изменяю строку в src/Makefile.am, чтобы явно включить источники для моей платформы (то есть Max OS X Darwin, большинствовремя) - вывод остается полностью неизменным.

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Я вижу, что вы имеете в виду greet.mm в сути, а greet.m в вопросе.Automake не поддерживает изначально код Objective-C ++.Для кода Objective C вам нужно иметь AC_PROG_OBJC в вашем configure.ac.Если вы действительно имели в виду код Objective-C ++, вам нужно сделать это с помощью правила суффикса .

0 голосов
/ 14 сентября 2010

g ++ -g -O2 -o привет main.o

Эта строка пытается создать исполняемый файл приветствия из main.o. Если функция greet () определена в каком-либо другом файле, например, greet.cpp, она должна быть:

++ -g -O2 -o приветствия main.o приветствие.o

Возможно, эта строка из Makefile.am

greetings_SOURCES = main.cpp greet.h

должно быть примерно так:

greetings_SOURCES = main.cpp greet.cpp

В Makefile.am у вас есть:

if OS_DARWIN  
greetings_SOURCES += darwin/greet.mm
endif
if OS_MINGW32  
greetings_SOURCES += mingw32/greet.cpp
endif

Это место, которое не выполнено должным образом. Вы должны проверить это.

...