使用子目录中的包含进行构建

Scons building with includes from subdirectories

本文关键字:包含进 构建 子目录      更新时间:2023-10-16

您必须在SConstruct文件中编写什么代码,以便在构建时编译子目录中所有包含的类?目前我的SConstruct文件看起来像这样:

VariantDir('build', '.')
env=Environment(CPPPATH=['#'],
                CPPDEFINES=[],
                LIBS=['-lpng', '-lassimp', '-lglfw3', '-lGLEW', '-lGLU', '-lGL', '-lX11', '-lXxf86vm', '-lXrandr', '-lpthread', '-lXi'],
                CXXFLAGS="-std=c++11")
env.Program(target='exec_test', source=[Glob('build/*.cpp')])

当我构建项目时,在子目录中的类中调用方法时出现undefined reference to错误。如果我将类移动到根目录,则不会收到任何错误。

注意:在另一个目录中构建与此无关!我尝试在根目录中构建,但这并没有改变任何东西!:)

SCons Glob() 函数不是递归的,因此您必须在源列表中添加每个子目录,如下所示:

env.Program(target='exec_test', source=[Glob('build/*.cpp'),
                                        Glob('build/subdir1/*.cpp',
                                        Glob('build/subdir2/*.cpp'])

这应该可以工作,或者您可以考虑创建一个分层构建,从而在每个子目录中创建一个 SConscript 脚本。