在C++中编译时提供库路径的更好方法

Better way to give provide path of libraries while compiling in C++

本文关键字:路径 更好 方法 C++ 编译      更新时间:2023-10-16

我对C++很陌生。我想知道,在编译或执行c++代码时,通常认为什么是为各种文件/库提供路径的巧妙方法。

例如:我在系统的某个位置安装了Boost库。让我们称之为X为了执行任何我必须在中键入的内容

c++ -I LongpathWhichisX/to/boost_1_60_0 example.cpp -o example

类似地,在执行代码时,输入文件的路径也很长。

有没有更好的方法来解决这个问题。有没有可能创建环境变量let Y,它指的是路径"X"。我们可以使用以下命令编译代码

c++ -I Y/to/boost_1_60_0 example.cpp -o example

最好的方法是使用构建工具。例如,可以使用Make。您可以在Makefile中定义所有包含路径(和其他选项)。在控制台中,您只需要调用make来构建项目,或者调用类似make run的命令来运行项目。

通常的方法是创建一个Makefile,在其中可以指定所有需要的路径并在适当的变量中编译选项

如果您不想要/需要Makefile,而是希望从命令行运行编译器,那么您可以使用CPATH环境变量来指定一个以冒号分隔的路径列表,以包括文件。

这是一个宽泛的问题,但其他答案突出了最重要的一步。学习像make这样的构建工具是至关重要的,因为它们将使您在开发过程中更容易构建项目,并使其他人稍后更容易构建。在现代编程时代,这还不够。如果你正在使用类似Boost的东西(它针对许多平台),你可能也想让你的构建跨平台。为此,您可以使用cmake或autotools,它们都有脚本,可以更容易地定位Boost库(和其他库)。

在我看来,任何其他构建系统都是一种痛苦,也是Linux发行版维护者的祸害。CMake曾经属于那个类别,但现在已经被广泛接受了。CMake的目标是更好地跨操作系统(Windows和Unixes)构建跨平台项目(在我看来也是如此),因为它试图在每个平台上提供本机构建系统(例如:Windows中的Visual Studio、所有Unixes上的Make、Mac上的XCode)。相反,自动工具以更大的深度瞄准Unix环境(在Windows上有点困难,但可以将嵌入式Unix系统瞄准更灵活的高端Unix服务器系统)。

注意:Autotools对交叉编译的支持在几乎所有方面都优于其他解决方案。当我下载一些需要为Arm Linux交叉编译的东西时,我总是感到尴尬,因为它使用了一些奇怪的构建系统。有趣的是,助推就是其中之一。

这是一个有点冗长的回答。总之,学习一个用于本地开发的构建系统是至关重要的。这是你技能的一部分,在你具备这项技能之前,你无法真正为开源项目做出贡献,甚至无法为你的雇主开发闭源项目做出贡献。