2017-10-03 1 views
0

필자는 필수적인 일부 기능을 사용하려면 라이브러리 (gphoto2)가 필요한 Qt 프로젝트가 있습니다. 이 라이브러리를 사용하는 기능을 사용하기 위해 qmake 또는 make 호출에 구성 옵션을 추가하고 싶습니다. 설치하지 않고 컴파일 할 수 있습니다.특정 기능을 활성화하는 사용자 정의 컴파일 플래그

이렇게 구성하는 가장 좋은 방법은 무엇입니까? 내가 추가 할 수있는 방법이 필요합니다 추측 내가 #ifdef ...

답변

1

를 사용하여 내 코드에서 조회 할 수 있습니다 컴파일러 매개 변수, 난 당신이 make (qmake없이)를 사용하는 가정을 기반으로 정의합니다. Qt 프로젝트에서 GNU make (단독)을 사용하는 것이 합리적이고 쉬운 일입니다. ninja과 같은 다른 build automation 도구를 사용할 수 있습니다.

그런 다음 -DWITH_GPHOTO으로 코드를 컴파일하고 C++ 코드에서 #if WITH_GPHOTO을 사용하여 Gphoto 기능을 사용하도록 설정할 수 있습니다.

당신은 당신의 Makefile

나는 "사용자 정의 컴파일러 플래그가"(예를 들어, 같은 GCC plugins가 제공 할 수있는) 것을 호출하지 않지만 전 처리기 플래그

CXXFLAGS+= -DWITH_GPHOTO 

을 추가하여 컴파일합니다. 그것은 꽤 표준적인 연습입니다.

아마 이러한 플래그를 moc에 전달하고 싶을 것입니다. 그런 다음 Makefile은 약간의 규칙과 명령을 통해 moc을 실행합니다.이 규칙과 명령도 조정할 수 있습니다.

현재로서는 GNU autoconf 또는 기타 Makefile 생성기를 cmake과 같이 생각할 수 있습니다. 이걸 너무 많이 보내야한다고 생각하지 않아요.

추 신 : PS. 나는 그 생각이 qmake으로 어떻게 변환되는지를 알지 못합니다.

1

qmake를 사용한다고 가정하면 파일 또는 환경 변수의 존재 여부에 따라 전 처리기 정의를 추가 할 수 있습니다. qmake 프로젝트를 추가하여 외부 라이브러리를 컴파일하고 기본적으로 자신의 프로젝트를 기준으로 배치 할 수 있습니다. 당신이 libgphoto2의 존재를 나타 내기 위해 처리기 정의를 추가 libgphoto2.pri에서

LIBGPHOTO2_PATH = $$getenv(LIBGPHOTO2PATH) 
isEmpty(LIBGPHOTO2_PATH): LIBGPHOTO2_PATH = ../../libgphoto2 

exists($$LIBGPHOTO2_PATH/libgphoto2.pri): include($$LIBGPHOTO2_PATH/libgphoto2.pri) 

, 당신은 확인, 포함 링커 경로 등 : 부양 프로젝트의 코드에서

DEFINES += WITH_LIBGPHOTO2 

추가 존재는 #ifdef을 사용합니다.

qmake-project를 컴파일하는 대신에 주어진 경로에서 컴파일 된 라이브러리가 있는지 확인하고 직접 값을 설정할 수 있습니다 (libgphoto가 어떻게 컴파일되는지 모르기 때문에 디폴트 디렉토리 구조/lib 디렉토리/등)를 포함하여 :

LIBGPHOTO2_PATH=$$getenv(LIBGPHOTO2PATH) 
isEmpty(LIBGPHOTO2_PATH): LIBGPHOTO2_PATH = ../../libgphoto2 

exists($$LIBGPHOTO2_PATH/include) { 
    DEFINES += WITH_LIBGPHOTO2 
    INCLUDEPATH += $$LIBGPHOTO2_PATH/include 
    LIBS += -L$$LIBGPHOTO2_PATH/lib -lgphoto2 
} 

당신은하지만, 훨씬 빨리보다 유연하고 쉽게 읽을 수 같은 qbs 더 현대적인 무언가로 이동하는 것이 좋습니다.