我正在使用Scons / Sconstruct构建一个具有以下目录结构的项目:
+A
|--A1
|--A2
+B
|--B1
|-b1.cpp
“A”目录包含B1中的sconstruct文件所引用的代码,如下所示 scontruct文件(在此简化使用):
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文件。我似乎要围成一圈,所以非常感谢任何帮助。
感谢。
答案 0 :(得分:2)
使用SCons构建时要记住的首要规则之一是要构建的源代码必须与根级SConstruct脚本位于同一目录/子目录中。您可以考虑几个选项:
将SConstruct放在A和B的根目录下,这将控制两个子目录的构建。
使每个目录(A和B)成为单独的项目,每个目录都有自己的SConstruct。然后,项目B将引用在项目A中单独构建的库。
选择取决于项目的性质和您的要求。选项2的缺点是,如果A1或A2中的源文件发生变化,则在编译项目B时不会检测到,因为项目B只会知道项目A中的库/标题。
关于CPPPATH
构造变量:此变量配置头文件的位置。如果此项目使用gcc / g ++编译器在Linux(或其他Unix变体)上,则CPPPATH
变量配置'-I'编译器标志。请记住,在设置CPPPATH变量时,不必包含'-I'标志,SCons将以独立于平台的方式添加它(意味着它将根据所使用的平台和编译器进行设置)。