باستخدام `pkg-config` كما وسيطة سطر الأوامر تحت cygwin/msys باش

StackOverflow https://stackoverflow.com/questions/101767

سؤال

أحاول استخدام cygwin مثل بناء بيئة ويندوز.لدي بعض التبعيات على 3rd الطرف حزم ، على سبيل المثال ، GTK+.

عادة عندما أقوم ببناء تحت لينكس في Makefile يمكنني إضافة استدعاء pkg-config كحجة دول مجلس التعاون الخليجي ، لذلك يخرج مثل ذلك:

gcc example.c `pkg-config --libs --cflags gtk+-2.0` 

هذا يعمل بشكل جيد تحت لينكس, ولكن في سيغوين أحصل على:

:Invalid argument
make: *** [example] Error 1

الآن, أنا فقط يدويا تشغيل pkg-config و لصق الإخراج في Makefile, الذي هو حقا رهيب.هل هناك طريقة جيدة إلى حل أو إصلاح هذه المشكلة ؟

جعل لا الجاني.لا يمكن نسخ ولصق سطر الأوامر التي تجعل يستخدم للاتصال دول مجلس التعاون الخليجي ، وهذا في حد ذاته سوف تعمل دول مجلس التعاون الخليجي ، الذي يوقف مع ":وسيطة غير صالحة".

كتبت اختبار صغير برنامج لطباعة وسيطات سطر الأوامر:

for (i = 0; i < argc; i++)
    printf("'%s'\n", argv[i]);

لاحظ علامات الاقتباس المفردة.

$ pkg-config --libs gtk+-2.0
-Lc:/mingw/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpang
owin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-
2.0 -lglib-2.0 -lintl

تشغيل من خلال برنامج الاختبار:

$ ./t `pkg-config --libs gtk+-2.0`
'C:\cygwin\home\smo\pvm\src\t.exe'
'-Lc:/mingw/lib'
'-lgtk-win32-2.0'
'-lgdk-win32-2.0'
'-latk-1.0'
'-lgdk_pixbuf-2.0'
'-lpangowin32-1.0'
'-lgdi32'
'-lpangocairo-1.0'
'-lpango-1.0'
'-lcairo'
'-lgobject-2.0'
'-lgmodule-2.0'
'-lglib-2.0'
'-lintl'
'

لاحظ أحد اقتباس مفردة على السطر الأخير.يبدو argc هو أحد أكبر مما ينبغي ، argv[argc - 1] null.تشغيل نفس الاختبار على لينكس لا يكون هذا نتيجة.

وقال أن هناك بعض طريقة يمكن أن يكون Makefile متجر نتيجة pkg-التكوين في متغير ومن ثم استخدام هذا المتغير بدلا من استخدام الجزء الخلفي-القراد المشغل ؟

هل كانت مفيدة؟

المحلول

وقال أن هناك بعض طريقة يمكن أن يكون Makefile متجر نتيجة pkg-التكوين في متغير ومن ثم استخدام هذا المتغير بدلا من استخدام الجزء الخلفي-القراد المشغل ؟

GTK_LIBS = $(شل pkg-config --يبس gtk+-2.0)

نصائح أخرى

هل أنت متأكد من أن كنت تستخدم تجعل المقدمة من Cygwin?استخدام

which make
make --version

للتحقق من هذا يجب أن عودة "/usr/bin/جعل" و "جنو جعل 3.8 [...]" أو شيئا من هذا القبيل.

هممم...هل حاولت

make -d

من شأنها أن تعطيك بعض (الكثير) من التصحيح الانتاج.

وتخميني هو أن cygwin دول مجلس التعاون لا يمكن التعامل مع-Lc:/مينغو/lib.محاولة ترجمة ذلك إلى cygwin المسار.

GTK_LIBS = $(patsubst -Lc:/%,-L/cygdrive/c/%,$(shell pkg-config --libs gtk+-2.0))

واحد الاقتباس في نهاية "t" قد يكون الإخراج قطعة أثرية من CRLF الترجمة.هو pkg-config سيغوين التطبيق ؟ دولار(شل) حل نشرت في وقت سابق قد تساعد مع هذا ، غنو تجعل يبدو إلى حد ما تسامحا من خط مختلف تنتهي الأساليب.

لدي مشكلة مشابهة و وجدت إصلاح هنا: http://www.demexp.org/dokuwiki/en:demexp_build_on_windows

الحرص على وضع /usr/bin قبل /cygwin/c/GTK/bin في المسار الخاص بك بحيث يمكنك استخدام /usr/bin/pkg-config.هذا هو المطلوب لأن GTK هي pkg-التكوين ما بعد العمليات مسارات, في كثير من الأحيان تغيير في ويندوز مسارات مطلقة في حكمه.ونتيجة لذلك, أدوات تحت cygwin قد لا يفهم تلك المسارات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top