2016-07-17 2 views
1

C++ 라이브러리 cryptominisat에 대한 녹 바인딩을 만들려고합니다. 실제 코드는 작동하지만 Cargo로 제대로 패키지하는 방법을 모르겠습니다. 나는 rust 디렉토리를 추가하고, 불행하게도 너무프로젝트 디렉토리 외부에서 소스 코드를 Cargo로 패키지하는 방법은 무엇입니까?

rust/ 
    cryptominisat/ 
     Cargo.toml 
     build.rs 
      src/ 
       rust code here 
src/ 
    c++ code here 
.gitignore 
readme, etc. 

처럼 그 안에 내화물 프로젝트를 생성

src/ 
    c++ code here 
.gitignore 
readme, etc. 

처럼

망할 놈의 저장소 보이는, cargo package는 패키지 싶어하지 않는 것 rust/cryptominisat 디렉토리 밖에서는 실제로 라이브러리를 빌드하는 데 필요한 C++ 코드가 포함되지 않습니다. 내가 무엇을 할 수 있을지? 나는 그것을 피할 수 있다면 전체 저장소를 rust 디렉토리로 옮기고 싶지 않다. 왜냐하면 그것을 업스트림으로 병합하는 것이 불가능하기 때문이다.

+1

심볼릭 링크는 어떤가요? 아니면 Rust 바인딩이 별도의 프로젝트에 있어야하며 git 하위 모듈을 사용하여 C++ 코드를 참조 할 수 있습니다. – Shepmaster

+0

직접 원격 저장소를 쉽게 관리 할 수있게 해주는'git submodule'과'git subtee' 도구가 있습니다. 그것이 당신에게 유용한 방향이라면 나는 정교 할 수있다. –

+0

rust-lua53 프로젝트는 다른 접근법을 취하고'build.rs'에서 빌드 타임에 루아 소스를 다운로드합니다. –

답변

2

가 일반적으로 해결 될 방법 :

  • 이 녹 REPO 내부의 C++의 repo의 사본을 포함하는 자식 서브 모듈 (또는 게시하기 전에 실행하는 스크립트)를 사용하여 (예를 들어, rust/cryptominisat/vendor/에서). 개발 중에는 C++ 코드의 두 복사본을 피하기 위해 대신 심볼릭 링크를 사용할 수 있습니다.

  • 빌드 할 때 tarball/clone/rsync 코드를 다운로드하려면 build.rs을 사용하십시오. 사용자가 볼 수있는 디렉토리가 오염되지 않도록 Cargo에서 지정한 OUT_DIR env var에 덤프 할 수 있습니다.

  • C++ 코드를 시스템 수준 라이브러리로 만듭니다. Rust 패키지는 빌드하지 않지만 이미 설치되어있을 것으로 예상하고 패키지를 검색하고 링크 플래그를 지정합니다. 그것이 대부분의 *-sys 상자가 작동하는 방법입니다.

관련 문제