45015


基本的な質問となりまして恐れ入ります。普段 Python にてコーディングを行っている者です。

最近 C++ を使い始める必要が出てきて気になったのですが、いわゆる Python の pip のような Package Manager
は存在しないのでしょうか？

以下のページを見ると通常は使わないという返答がついているのですが、その場合、該当のライブラリファイルをダウンロードして、そのパスを指定して include
することになるのでしょうか (Python の import をイメージしています）

[Does C++ have a package manager like npm, pip, gem,
etc?](https://stackoverflow.com/questions/27866965/does-c-have-a-package-
manager-like-npm-pip-gem-etc)

恐れ入りますが、一般的な作法について教えていただけますと幸いです。  
よろしくお願いします。


CC BY-SA 4.0
2018-06-23T13:09:27.007
45012
2018-06-23T14:03:53.883
28410
question
c++
C++ でライブラリを include したい場合は、基本的にダウンロードする必要があるのでしょうか？


C++でもPythonでも、標準ではないライブラリをシステムにダウンロード、インストールする必要があるのはどの言語でも同じです。  
Pythonのpipは「パッケージマネージャー」で、上記のダウンロードやインストールを支援する仕組み(ツール)です。  
pipを使ったからといって、Pythonでimportが不要になるわけではありませんので念のため。


CC BY-SA 4.0
2018-06-23T13:35:35.893
45014
2018-06-23T13:35:35.893
3060
45012
answer


私の知る限り、世間一般で **広く** 使われているとまで言えるような C++ 向けパッケージマネジャーはありません
(2018年6月現在)。少なくとも、Python における pip、Node.js における npm
のような、処理系と紐付いている公式パッケージマネジャーは存在しません。

C++ 向けで広く使われているライブラリは、単にインストールしたいだけなのであれば brew / apt / yum といった各種 OS
向けのパッケージマネジャーからインストールすれば充分であることが多いです (たとえば apt だと典型的には `何とかかんとか-dev`
という風な名前で配布されています)。

そうでなくても、ソースからビルドするなどして用意した後、(Linux / Unix であれば) `CPATH` や `LIBRARY_PATH`
という環境変数を[設定](https://stackoverflow.com/q/2497344/5989200)したり `-I` や `-L`
などのコンパイラオプションを使って探索パスを追加することで適宜 include できます。[pkg-
config](https://ja.wikipedia.org/wiki/Pkg-config)
を使ってこの操作を簡略化することもあります。また、元々デフォルトで探索パスに含まれているディレクトリがいくつかあるので、そこにインストールしてしまう方法もあります。

もちろん pip 同様の仕組みを C++ のために作ることは可能であり、[Conan](https://conan.io/) や
[Hunter](https://github.com/ruslo/hunter)
などいくつか[知られているようです](https://stackoverflow.com/a/36023212/5989200)
(私は使ったことがありませんが……)。


CC BY-SA 4.0
2018-06-23T13:41:58.620
45015
2018-06-23T13:52:45.617
2018-06-23T13:52:45.617
19110
19110
45012
answer


C/C++は基本、ライブラリはヘッダファイルのインクルードになります。  
(#include "ファイル名.h")  
ヘッダファイルにインクルードするライブラリに含まれる関数/クラスに関する情報を取得します。

逆に言うと、ヘッダファイルにライブラリに含まれる情報が正しく記載されていないと、実行時に問題を起こすことになります。


CC BY-SA 4.0
2018-06-23T13:42:34.613
45016
2018-06-23T13:42:34.613
45012
answer


[Pythonには複数の実装が存在](https://ja.wikipedia.org/wiki/Python#%E5%AE%9F%E8%A3%85)し、また複数のプラットフォームで動作しますが、[pip](https://pip.pypa.io/en/stable/installing/#python-
and-os-compatibility)は

> pip works with CPython versions 2.7, 3.3, 3.4, 3.5, 3.6 and also pypy.  
>  pip works on Unix/Linux, macOS, and Windows.

でしか動作しないようです。  
C++言語はPython以上に複数の実装が存在し、また複数（ほぼすべて？）のプラットフォームで動作するため、パッケージマネージャを提供しようがありません。

別の視点で、Pythonはネットワーク機能を有しているためpipもそれを利用することでダウンロードを実現していますが、C++は現時点でネットワーク機能が標準化されていないため、そもそも単独でダウンロード機能を実現できません。

nekketsuuuさんが挙げたものの他に、Microsoft社がWindows / Linux /
MacOS向けに[vcpkg](https://docs.microsoft.com/ja-
jp/cpp/vcpkg)というパッケージマネージャを提供しています。


CC BY-SA 4.0
2018-06-23T14:03:53.883
45020
2018-06-23T14:03:53.883
4236
45012
answer