문제

Windows에서 cygwin을 빌드 환경으로 사용하려고 합니다.GTK+와 같은 타사 패키지에 일부 종속성이 있습니다.

일반적으로 Linux에서 빌드할 때 Makefile에서 pkg-config에 대한 호출을 gcc에 대한 인수로 추가할 수 있으므로 결과는 다음과 같습니다.

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

이것은 Linux에서는 잘 작동하지만 cygwin에서는 다음을 얻습니다.

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

지금은 수동으로 pkg-config를 실행하고 출력을 Makefile에 붙여넣고 있는데 정말 끔찍합니다.이 문제를 해결하거나 수정할 수 있는 좋은 방법이 있습니까?

Make가 범인은 아닙니다.gcc를 호출하는 데 사용하는 명령줄을 복사하여 붙여넣을 수 있으며, 그 자체로 gcc가 실행되고 ":잘못된 인수입니다."

명령줄 인수를 인쇄하기 위해 작은 테스트 프로그램을 작성했습니다.

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는 예상보다 1이 더 크고 argv[argc - 1]은 null인 것 같습니다.Linux에서 동일한 테스트를 실행하면 이 결과가 나오지 않습니다.

즉, 백틱 연산자를 사용하는 대신 Makefile에서 pkg-config의 결과를 변수에 저장한 다음 해당 변수를 사용할 수 있는 방법이 있습니까?

도움이 되었습니까?

해결책

즉, 백틱 연산자를 사용하는 대신 Makefile에서 pkg-config의 결과를 변수에 저장한 다음 해당 변수를 사용할 수 있는 방법이 있습니까?

GTK_LIBS = $(shell pkg-config --libs gtk+-2.0)

다른 팁

Cygwin에서 제공하는 make를 사용하고 있습니까?사용

which make
make --version

확인하려면 - "/usr/bin/make" 및 "GNU Make 3.8 [...]" 또는 이와 유사한 것을 반환해야 합니다.

흠...시도해 봤어?

make -d

그러면 많은 디버깅 출력이 제공됩니다.

내 생각에는 cygwin의 gcc가 -Lc:/mingw/lib를 처리할 수 없는 것 같습니다.이를 cygwin 경로로 변환해 보십시오.

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

"t" 출력 끝에 있는 작은따옴표는 CRLF 번역의 인공물일 수 있습니다.pkg-config가 cygwin 앱인가요?이전에 게시한 $(shell) 솔루션이 이 문제에 도움이 될 수 있습니다. GNU make는 다양한 줄 끝 스타일에 상당히 관대해 보이기 때문입니다.

비슷한 문제가 있었는데 여기서 해결 방법을 찾았습니다. http://www.demexp.org/dokuwiki/en:demexp_build_on_windows

/usr/bin/pkg-config를 사용할 수 있도록 PATH에서 /cygwin/c/GTK/bin 앞에 /usr/bin을 넣어야 합니다.이는 GTK의 pkg-config가 경로를 후처리하고 종종 해당 경로를 Windows 절대 경로로 변환하기 때문에 필요합니다.결과적으로 cygwin의 도구는 해당 경로를 이해하지 못할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top