2013-01-13 31 views
5

Tôi đang cố gắng viết một số chương trình bằng cách sử dụng dự án OpenKinect. Tôi muốn thêm nhánh master của OpenKinect làm thư mục con vào nguồn dự án của tôi. Nhưng, nếu bạn nhìn vào CMake của OpenKinect, có quá nhiều thứ ở đó, và tôi không cần mọi thứ. Có những lựa chọn nhất định ở đó, đang được thiết lập để ON hoặc OFF, như thế này:Làm thế nào để bao gồm CMake git repo hiện có làm submodule trong dự án CMake của riêng tôi?

OPTION(BUILD_AUDIO "Build audio support" OFF) 
OPTION(BUILD_REDIST_PACKAGE "Build libfreenect in a legally-redistributable manner (only affects audio)" OFF) 
OPTION(BUILD_EXAMPLES "Build example programs" ON) 
OPTION(BUILD_FAKENECT "Build fakenect mock library" ON) 
OPTION(BUILD_C_SYNC "Build c synchronous library" ON) 
OPTION(BUILD_CPP "Build C++ Library (currently header only)" ON) 
OPTION(BUILD_CV "Build OpenCV wrapper" ON) 
OPTION(BUILD_AS3_SERVER "Build the Actionscript 3 Server Example" OFF) 
OPTION(BUILD_PYTHON "Build Python extension" ON) 
IF(PROJECT_OS_LINUX) 
    OPTION(BUILD_CPACK "Build an RPM or DEB using CPack" ON) 
ENDIF(PROJECT_OS_LINUX) 

Nếu không thực hiện bất kỳ thay đổi lớn cho các tập tin OpenKinect (vì vậy mà tôi có thể git pull bất cứ lúc nào tôi cần phải), làm cách nào để chỉ nhập một số phần (ví dụ: C++ wrapperOpenCV bindings) vào dự án CMake của riêng tôi? Tôi đã nghĩ đến việc sao chép các thư mục nhất định, không phụ thuộc vào các thư mục khác, nếu tôi viết lại hoàn toàn các tệp CMake. Tôi sẽ không thể sử dụng git nữa, nhưng nó sẽ là một sửa chữa nhanh chóng. Nhưng tôi nhận được lỗi lạ theo cách đó, chẳng hạn như "stdexcept không được khai báo trong phạm vi này", điều này không có ý nghĩa, bởi vì nó là một thư viện gC++ chuẩn.

+1

Tại sao không phải là "ngã ba" OpenKinect và giữ các thay đổi của bạn trong một chi nhánh riêng biệt. Bằng cách đó bạn có thể giữ "kéo" trong các bản cập nhật từ git-OpenKinect, trong khi vẫn giữ "các sửa đổi" của bạn trên một nhánh riêng biệt. Sau đó, bạn có thể làm những gì Johannes S gợi ý. –

Trả lời

6

Nếu bạn chỉ muốn bật/tắt một số phần của thư viện đó, bạn có thể chỉ cần đặt các tùy chọn thích hợp trước khi gọi ADD_SUBDIRECTORY.

Chỉ cần sử dụng cùng một lệnh OPTION như trong thư viện CMakeLists.txt nhưng đặt chúng ON/OFF nếu bạn cần. Tất nhiên, oyu là miễn phí để thay đổi/chọn chuỗi mô tả như bạn muốn.

Ngoài ra (và nếu tùy chọn có giá trị khác với đúng/sai), bạn có thể sử dụng SET(.... CACHE ...)

ví dụ

SET(BUILD_CPP TRUE CACHE BOOL "Build C++ Library (currently header only)") 

tương tự câu hỏi: Override option in CMake subproject

+0

Nhưng điều này ngụ ý thay đổi CMakeLists.txt của OpenKinect, không mong muốn ... –

+1

Không, không hề. Chỉ cần đặt chúng trong * your * CMakeLists.txt trước khi gọi 'ADD_SUBDIRECTORY (....)' để bao gồm OpenKinect. Tất cả các cài đặt/biến được kế thừa bởi tiểu dự án. –

+0

Nó có phù hợp với bạn không? Nếu có, nó sẽ là tốt đẹp nếu bạn có thể chấp nhận câu trả lời. Nếu không, xin vui lòng cho chúng tôi biết những gì còn thiếu. –

Các vấn đề liên quan