2015-10-12 1 views
0

Я получаю следующий вопрос, когда я пытаюсь построить этот проект:<image> .h - Откуда это?

[email protected]:~/comical$ make -C src 
make: Entering directory '/home/drazisil/comical/src' 
Converting firstpage.png 
... 

make[1]: Entering directory `/home/travis/build/drazisil/comical/src' 

`wx-config --cxx` `wx-config --cxxflags` -O2 -Wall -pipe -D_UNIX -I../unrar -I../unzip -c -o ComicalApp.o ComicalApp.cpp 

In file included from ComicalFrame.h:43:0, 

       from ComicalManager.h:32, 

       from ComicalApp.h:32, 

       from ComicalApp.cpp:28: 

firstpage.h:2:1: error: stray ‘#’ in program 

Причина, как представляется, будет, потому что есть -e вставляется в начале и конце сгенерированных .h файлов

#ifndef _firstpage_png_h 
-e #define _firstpage_png_h 
static const unsigned char firstpage_png[] = { 
... 
... 
... 
-e }; 

#endif 

Поскольку я не уверен, какой шаг процесса вызывает это, я не уверен, как его удалить или что это значит. Поиск -e не работает так хорошо.

Заранее благодарю за помощь.

ETA: Makefile: https://github.com/drazisil/comical/blob/dev/Makefile

+1

Какое правило makefile преобразует png-файлы в файлы заголовков? –

+0

Я не уверен, это часть проблемы. Файл makefile появился с проектом. Я думаю, что это шаг 'make -C src', неизвестный. Я связал полный make-файл. – Drazisil

ответ

2

Проблема заключается в файле src/Makefilethis target.

%.h : %.png 
    @echo "Converting" $< 
    @echo "#ifndef _"$*"_png_h" > [email protected] 
    @echo -e "#define _"$*"_png_h\n" >> [email protected] 
    @echo "static const unsigned char "$*"_png[] = {" >> [email protected] 
    @hexdump -e "13/1 \"0x%02X, \" \"\n\"" $< | sed 's/0x ,//g' >> [email protected] 
    @echo -e "};\n\n#endif" >> [email protected] 

В частности, две линии, которые используют echo -e в попытке поставить дополнительный символ новой строки в конце отражаемых вывода.

echo -e, однако, нестандартный, и ваша оболочка/версия echo явно не понимает этого.

Эта цель будет лучше с этими линиями переписаны как:

@printf '#define _$*_png_h\n\n' >> [email protected] 
@printf '};\n\n#endif\n' >> [email protected] 

Дополнительных улучшения этой целью также возможен, но вне сферы этой проблемы (в основном использовать одну команду оболочки и одного перенаправления вместо пяти).

+0

Большое вам спасибо! 1 :, Я искал неправильный makefile, 2: я не уверен, что не так с моим эхом debian/ubuntu, что он не только не примет -e (указан в человеке), но и игнорирует -версию поэтому я даже не знаю, что это такое. – Drazisil

+1

Что игнорирует '--version'? 'Echo'? 'echo' не принимает аргументы во многих оболочках (включая, например, тире, которая, как я знаю, является'/bin/sh' в Debian-производных системах на данный момент). Авторам этого makefile нужно написать более портативные рецепты. Вы должны подать с ними ошибку. Бит 'make -C src' получен из файла makefile. '-C' говорит:« Перейдите в этот каталог и запустите 'make' снова». –

+0

Я это выясняю. Это просто очень запутанно, когда я запускаю 'man echo', и он перечисляет -e и -version как действительные, а затем не принимает их. Большое спасибо за помощь :) – Drazisil