C++ 良好实践:如何定义外部库的编译路径

C++ 良好实践:如何定义外部库的编译路径,c++,build,path,scons,C++,Build,Path,Scons,我对编译和构建项目相当不习惯,所以如果我的编译和构建方法有点奇怪,请原谅。欢迎任何提示 我目前正在研究一个三维几何C++项目(它是一个DLL)。此项目使用外部dll,如BOOST。因此,在构建项目时,我必须定义.dll、.lib和.h/.hpp文件所在的目录。 目前,我正在使用SCON构建项目,并直接在SConstruct文件中定义这些路径 但是后面的路径会被其他的构建操作重用。(在当前情况下编译MeX中的C++代码用于Matlab,但这不是真正的要点)。 因此,我目前必须在不同的地方定义相同

我对编译和构建项目相当不习惯,所以如果我的编译和构建方法有点奇怪,请原谅。欢迎任何提示

我目前正在研究一个三维几何C++项目(它是一个DLL)。此项目使用外部dll,如BOOST。因此,在构建项目时,我必须定义.dll、.lib和.h/.hpp文件所在的目录。

目前,我正在使用SCON构建项目,并直接在SConstruct文件中定义这些路径

<强>但是后面的路径会被其他的构建操作重用。(在当前情况下编译MeX中的C++代码用于Matlab,但这不是真正的要点)。 因此,我目前必须在不同的地方定义相同的路径,这是低效的。此外,项目必须易于为其他用户设置。所以我希望避免在许多不同的文件中更改和更新路径

从我的立场来看,有两种选择:

  • 首先,我可以要求用户定义环境变量,并从各种构建脚本中读取它们。然而,我对这个解决方案并不满意,因为它要求用户进行额外的操作,而且据我所知,我失去了scons提供的跨平台可移植性。(我知道这可能仍然是可能的,但需要一些额外的步骤,我希望事情尽可能简单)

  • 其次,我可以在项目根目录下的单个.txt(或类似文件)文件中定义我的所有路径,并从各种构建脚本中读取它。然而,这使得这个过程对打字错误和解析错误非常敏感,这并不是我真正喜欢的

因此,我的问题如下: 是否有更好的方法或良好做法让用户输入编译所需的路径,以满足以下要求:

  • 每个路径用户只输入一次
  • 通过文件或其他方式在项目文件夹中完成
  • 尽可能的简单
  • 不需要太多额外的下载/安装(我真的不想让用户为此安装一个全新的软件。但是我可以在我的项目文件中添加一个简单的light.exe之类的东西)

  • SCons的变量可能是您在这里的最佳选择

    见:

    它允许从文件中读取默认值:

    vars = Variables('custom.py')
    

    您必须精心设计一些逻辑来保存命令行上指定的任何变量。

    您可以创建一个自定义的scons构建步骤,以将变量导出到命令行支持的任何格式MEX@AlanBirtles是的,这个可以。这比我现在的选择要好。谢谢,这是我一直在寻找的选择。与在sconstuct文件的开头简单地执行import custom相比,这样做是否有一个主要优势?我知道它在编译时为用户提供了更大的灵活性,但是它也使命令行更长、更重。还有什么区别吗?例如,如果您不指定命令行变量,并且这些值存储在custom.py中,它根本不会添加到命令行中。如果您编写custom.py(如果用户指定值),那么下次运行时,命令行也很简单。这不是你想要的吗?好吧,我有时间玩一下,它确实是我需要的工具。我将通过说custom.py中的变量也可以从MATLAB访问来完成答案(在这种情况下,它对mex编译很有用)。谢谢你的时间和回答。