良好实践:如何定义外部库的编译路径
Good Practice: How to define path to external libraries for compilation
我不太习惯编译和构建项目,如果我的编译和构建方法看起来有点奇怪,请原谅我。欢迎任何提示。
我目前正在研究 3D 几何 C++ 项目(这是一个 dll)。该项目使用外部 dll,例如 BOOST。所以在构建项目时我必须定义.dll、.lib和.h/.hpp文件所在的目录。
目前我正在使用 scons 构建项目并直接在 SConstruct 文件中定义这些路径。
然而,这些路径稍后会被其他构建操作重用。(在本例中,在 MEX 中为 matlab 编译 C++ 代码,但这不是这里的重点)。
因此我目前必须在不同的地方定义相同的路径,这是低效的。此外,该项目必须易于为其他用户设置。因此,我想避免必须更改和更新许多不同文件中的路径。
从我的立场来看,我看到两种选择:
首先我可以要求用户定义环境变量并从我的各种构建脚本中读取它们。然而,我对这个解决方案并不是很满意,因为它要求用户进行额外的操作,据我所知,我失去了 scons 提供的跨平台可移植性。 (我知道它仍然可能,但需要一些额外的步骤,我希望尽可能简单)
其次,我可以在项目根目录下的单个 .txt(或类似文件)文件中定义我的所有路径,并从我的各种构建脚本中读取它。然而,这使得该过程对拼写错误和解析错误很敏感,这不是我的口味。
所以我的问题如下:
是否有更好的方法或良好做法让用户输入编译所需的路径满足以下条件:
- 是否让用户每条路径只输入一次
- 通过文件或其他方式在项目文件夹中完成
- 尽可能万无一失
- 不需要太多额外的东西 download/installing(我真的不想让用户为此安装一个全新的软件。但是我可以接受像简单的 light .exe 这样的东西,我可以添加到我的项目文件中)
SCons 的变量可能是您的最佳选择。
参见:https://scons.org/doc/production/HTML/scons-user.html#sect-command-line-variables
它允许从文件中读取默认值:
vars = Variables('custom.py')
您必须设计一些逻辑来保存在命令行上指定的任何变量。
我不太习惯编译和构建项目,如果我的编译和构建方法看起来有点奇怪,请原谅我。欢迎任何提示。
我目前正在研究 3D 几何 C++ 项目(这是一个 dll)。该项目使用外部 dll,例如 BOOST。所以在构建项目时我必须定义.dll、.lib和.h/.hpp文件所在的目录。
目前我正在使用 scons 构建项目并直接在 SConstruct 文件中定义这些路径。
然而,这些路径稍后会被其他构建操作重用。(在本例中,在 MEX 中为 matlab 编译 C++ 代码,但这不是这里的重点)。
因此我目前必须在不同的地方定义相同的路径,这是低效的。此外,该项目必须易于为其他用户设置。因此,我想避免必须更改和更新许多不同文件中的路径。
从我的立场来看,我看到两种选择:
首先我可以要求用户定义环境变量并从我的各种构建脚本中读取它们。然而,我对这个解决方案并不是很满意,因为它要求用户进行额外的操作,据我所知,我失去了 scons 提供的跨平台可移植性。 (我知道它仍然可能,但需要一些额外的步骤,我希望尽可能简单)
其次,我可以在项目根目录下的单个 .txt(或类似文件)文件中定义我的所有路径,并从我的各种构建脚本中读取它。然而,这使得该过程对拼写错误和解析错误很敏感,这不是我的口味。
所以我的问题如下: 是否有更好的方法或良好做法让用户输入编译所需的路径满足以下条件:
- 是否让用户每条路径只输入一次
- 通过文件或其他方式在项目文件夹中完成
- 尽可能万无一失
- 不需要太多额外的东西 download/installing(我真的不想让用户为此安装一个全新的软件。但是我可以接受像简单的 light .exe 这样的东西,我可以添加到我的项目文件中)
SCons 的变量可能是您的最佳选择。
参见:https://scons.org/doc/production/HTML/scons-user.html#sect-command-line-variables
它允许从文件中读取默认值:
vars = Variables('custom.py')
您必须设计一些逻辑来保存在命令行上指定的任何变量。