3

我正在使用 Scons/Sconstruct 构建具有以下目录结构的项目:

+A
|--A1
|--A2
+B
|--B1
  |-b1.cpp

'A' 目录包含 B1 中的 sconstruct 文件引用的代码,根据以下 sconstruct 文件(在此处简化使用):

env = Environment(CPPPATH=['.', '../../']
source_common = 'A/A1/source.cpp'
env.Program( target = 'b1_exec', source = ['b1.cpp', source_common] )

但是,在编译时,我收到无法找到 A/A1/source.cpp 的错误。我原以为添加 CPPPATH 参数会允许编译器找到 source.cpp 文件。我似乎在兜圈子,所以非常感谢任何帮助。

谢谢。

4

1 回答 1

2

使用 SCons 构建时要记住的首要规则之一是要构建的源代码必须与根级 SConstruct 脚本位于同一目录/子目录中。您可以考虑以下几个选项:

  1. 将 SConstruct 放在 A 和 B 的根目录下,这将控制两个子目录的构建。

  2. 使每个目录(A 和 B)成为单独的项目,并且每个目录都有自己的 SConstruct。然后项目 B 将引用项目 A 中单独构建的库。

选择仅取决于项目的性质和您的要求。选项 2 的一个缺点是,如果 A1 或 A2 中的源文件发生更改,则在编译项目 B 时不会检测到它,因为项目 B 只会知道项目 A 中的库/头文件。

关于CPPPATH构造变量:此变量配置头文件的位置。如果此项目在 Linux(或其他 Unix 变体)上使用 gcc/g++ 编译器,则该CPPPATH变量配置“-I”编译器标志。请记住,在设置 CPPPATH 变量时,不必包含“-I”标志,SCons 将以独立于平台的方式添加它(这意味着它将根据所使用的平台和编译器进行设置)。

于 2013-11-01T14:52:40.510 回答