@涛吴 的回答很棒,但可能过于专业,而且我也想提一些不一样的观点。尝试尽量用通俗的语言讲下。限于个人水平及易懂起见,遣词用句可能不太严谨,见谅。
要回答这个问题,不妨回顾一下“包管理器”的工作场景。
你执行pip install,python(平台)就会把你所请求的包下载安装到 python(平台)的相应位置即包管理目录内,那么下次你使用 python(语言)写程序并尝试 import的时候,python(平台)就可以到包管理目录中找到你刚下载好的模块,得以让你顺利 import,你的程序得以顺利执行,不至于 not found。
注意这里 python 这个词,可以同时指代 python 这个软件平台以及在该平台上解释执行的编程语言。类似的,pip 之于 python 就如同 npm 之于 node(平台叫 node ,编程语言是 javascript,包管理器叫 npm),composer 之于 php(平台和语言都叫 php)一样。这些软件平台在使用之前都要经过安装的过程(我们平常说的搭建环境即包含了安装过程)。包管理器则作为软件平台的一个模块被同时部署在了机器上。
再进一步,nuget 是 .net 平台的包管理器,而 .net 的语言可不止 c# 一种。因此我们说 .net 拥有包管理器而 c# 没有,否则就犯了概念性的错误。
c 的情形和 c#/javascript 有几分相似:当我们说“c 语言”这个词的时候,它很明确就是指代一门编程语言而非一个平台。因此说“c 语言中没有类似 Python 中 pip 的包管理工具”是没有毛病的。但非绝对:广义上讲,如果我们非要给 c 找一个“平台”的话,那大概就是 unix-like 系统本身了。
unix 系统本身可以非严格都看作一个巨大的 c shell,而 unix 本身的包管理器就是“c 语言的包管理器”。当你 yum install 某 devel 包的时候,头文件会被加入 include 目录供你 #include,静态库会被加入 libs 目录供你在连接的时候引入,也许还有可执行程序被加入 bin。现在你可以在你的 c 程序里面引用你刚刚安装的包了,这难道不正是包管理所干的事情吗?
总结一下这个问题。C 语言中究竟有没有类似 Python 中 pip 的包管理工具?非要说的话还真有,但可能其存在形式/工作方式和你平常想象中不同而已。之前写过一个论证 C/C++ 和其他编程语言地位差别的回答,你可以拓展参考下。现在的编程语言越来越多,为什么 C 和 C++ 还没有被现在的时代淘汰呢?www.zhihu.com