在C++中编译时提供库路径的更好方法
Better way to give provide path of libraries while compiling in C++
我对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交叉编译的东西时,我总是感到尴尬,因为它使用了一些奇怪的构建系统。有趣的是,助推就是其中之一。
这是一个有点冗长的回答。总之,学习一个用于本地开发的构建系统是至关重要的。这是你技能的一部分,在你具备这项技能之前,你无法真正为开源项目做出贡献,甚至无法为你的雇主开发闭源项目做出贡献。
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 如何更好地检查两个 char 变量是否在一组值中?
- 有没有更好的方法对C++中的三个整数进行排序?
- 什么模板用法在阶乘中更好
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- 在C++中编译时提供库路径的更好方法
- 有没有更好的方法来通过 C/C++ 中的环境变量创建路径
- 寻找遍历图中所有顶点的路径的更好算法是什么?