c++ - 良好实践:如何定义外部库的路径以进行编译
问题描述
我相当不习惯编译和构建项目,所以如果我的编译和构建方法看起来有点奇怪,请原谅我。欢迎任何提示。
我目前正在研究一个 3D 几何 C++ 项目(这是一个 dll)。该项目使用外部 dll,例如 BOOST。因此,在构建项目时,我必须定义 .dll、.lib 和 .h/.hpp 文件所在的目录。
目前我正在使用 scons 来构建项目并直接在 SConstruct 文件中定义这些路径。
但是,这些路径稍后会被重用于其他构建操作。(在本例中,在 MEX 中为 matlab 编译 C++ 代码,但这并不是重点)。
因此,我目前必须在不同的地方定义相同的路径,这是低效的。此外,该项目必须易于为其他用户设置。因此,我想避免在许多不同的文件中更改和更新路径。
从我的立场来看,我看到了两种选择:
首先,我可以要求用户定义环境变量并从我的各种构建脚本中读取它们。但是我对这个解决方案并不满意,因为它要求用户进行额外的操作,据我所知,我失去了 scons 提供的跨平台可移植性。(我知道它可能仍然有可能,但需要一些额外的步骤,我想让事情尽可能简单)
其次,我可以在项目根目录的单个 .txt(或类似文件)文件中定义所有路径,并从我的各种构建脚本中读取它。然而,这使得该过程对拼写错误和解析错误很敏感,这并不符合我的口味。
所以我的问题如下: 是否有更好的方法或良好的做法让用户输入满足以下条件的编译所需的路径:
- 用户是否每条路径只输入一次
- 通过文件或其他方式在项目文件夹中完成
- 尽可能万无一失
- 不需要太多额外的下载/安装(我真的不想让用户为此安装一个全新的软件。但是我可以在我的项目文件中添加一个简单的轻量级 .exe 之类的东西)
解决方案
SCons 的变量可能是您最好的选择。
请参阅:https ://scons.org/doc/production/HTML/scons-user.html#sect-command-line-variables
它允许从文件中读取默认值:
vars = Variables('custom.py')
您必须制定一些逻辑来保存命令行上指定的任何变量。
推荐阅读
- android - 如何动态设置视图的宽度
- github - 在组织级别启用 Github 中的分支保护规则
- mysql - 选择具有用户自己时间范围的行
- c# - 尝试在 VSTO 中获取内部 SheetId 以帮助检测工作表重命名
- mysql - MYSQL从ID和seq_num的表中查找下一个seq_num
- amazon-web-services - 如何在 AWS 弹性豆茎上部署 MEAN 堆栈应用程序?
- python - 将节点标签添加到散景网络图中的连接节点
- google-apps-script - 在 Google 表单的键中设置正确答案
- node.js - Express.js - 获取 res.send 值
- apache-kafka - 多种事件类型的 Apache Flink CEP 模式