質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

4806閲覧

C++における自作ライブラリのインストールについて

kaito2

総合スコア13

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

1クリップ

投稿2019/02/22 12:55

C++ 初学者です。

自作ライブラリをGithubに保存して、Python(pip)では以下のコマンドに対応する方法でインストールしたいのですが、
どの様な方法(パッケージマネージャの選定も含めて)を取るのが一般的なのでしょうか?

$ pip install git+<レポジトリのURL>
退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

C++ではそもそもビルド手順が統一されていなくて(C++標準化委員会に提案は出ている)、雑多なビルド手順(msbuild, GNU Make, etc)を吐き出すツールとしてCMakeがデファクトスタンダード化しつつあります。ところがCMakeの呼び出し方もCMakeスクリプトの書き方に依存するので統一的ではありません。

vcpkgはパッケージマネージャですが、バイナリは配布してなくてあくまでCMakeを呼び出してビルドしていい感じにする作業をコマンド一つでやってくれる&依存ライブラリもビルドしてくれるというものになります。

Conanはなんかバイナリ配ってるぽいですね、使ったことないので知らんけど。
https://qiita.com/kai_kou/items/4dbe5b920a8598891ec7
でのやり取りでの感じではConanのCMakeの使い方はなんか汚いなって感じがしています。ライブラリ側の責任範疇のことをパッケージマネージャが面倒見るってどうなんよという。

vcpkgにしてもconanにしてもWindowsだとVisual Studioのことしか概ね考慮してない感じです。

じゃあmingwどうするんだよって話ですが、もっとも有名なmingwを導入する方法としてmsys2を利用する方法があるのですが、これはArch Linuxとおなじくpacmanをパッケージマネージャに採用しているので、PKGBUILDを書いておくのも一つの手段だったりします。ついでに
https://github.com/Alexpux/MINGW-packages/
に投げておくとAlexpux氏の気が向けば採用されてpacmanコマンドでバイナリが拾えるようになります。

結論としては、C++でパッケージマネージャとか未来過ぎて当分安定しないでしょうから

  1. ヘッダーオンリーライブラリにする: どうせtemplate多用するとそれしかなくなるのであり、git submoduleで引っ張るだけで使えるし
  2. CMakeでビルドできるようにしておく: 今更CMakeに依存しない世界がC++に来るとしたらC++標準化委員会がなにかするくらいしかないと思うので、とりあえずCMakeを書くのは大事でしょう。依存ライブラリがある場合は入手法をきちんとドキュメントを書くことですかね。あと自身がライブラリならxxx-config.cmake(xxxはライブラリ名)を自動生成するようにCMakeを書きましょう。

追記

Boostは頭のおかしい頭がbooooooooooost!したビルド手順を強制していて本当にどうかしているので真似するべきではないですしというかあの頭のおかしさ頭がbooooooooooost!した感じは真似できるものではありません。boostは各モジュールが複雑怪奇に密に依存しあっているのでああでもしないとビルドできないんでしょうが、基本的に悪い見本です。

投稿2019/02/22 15:52

編集2019/02/22 16:10
yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaito2

2019/02/23 16:43

ご回答有り難うございます! なるほど。C++のビルド周りの現状がわかりとても参考になりました! ひとまず「ヘッダーオンリーライブラリにする」という方針で行こうと思います。
guest

0

C++ のパッケージマネージャには、以下のようなものがあります。

もし Visual Studio での開発を想定しているのであれば、標準搭載されている NuGet がおすすめです。

また余談ですが、C++ は他の新しい言語と比べると、あまりパッケージマネージャの利用が進んでいません。
他のライブラリとの依存関係が複雑とかでなければ、GitHub で公開しておくだけでも十分かもしれません。

C++ で有名なライブラリに BoostOpenCV があります。
このようなライブラリが、どのように公開されているのか見てみると参考になると思います。

投稿2019/02/22 14:10

編集2019/02/22 14:33
nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaito2

2019/02/22 14:13

ご回答有り難うございます! >また余談ですが、C++ は他の新しい言語と比べると、あまりパッケージマネージャの利用が進んでいません。 こういった情報を既に使っている方から聞けるのはとても参考になります! 本当にありがとうございます。 >他のライブラリとの依存関係が複雑とかでなければ、GitHub で公開しておくだけでも十分かもしれません。 Github に公開しておいて、 submodule として使うということでしょうか?
nskydiving

2019/02/22 14:39

回答に Boost と OpenCV の公式サイトのリンクを追記しておきました。 実際にダウンロードしてもらえれば、ライブラリがどんな感じで公開されているのかが分かると思います。
kaito2

2019/02/22 15:21

ありがとうございます! 早速確認してみようと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問