编写 scons 脚本来处理许多子目录中的文件编译

Writing scons script to handle compilation of files in many subdirectories

本文关键字:文件 编译 子目录 许多 scons 脚本 本来 处理 编写      更新时间:2023-10-16

我有一个项目,它由子目录中的许多文件组成。我有一个简单的Makefile来处理编译。它看起来像这样:

CC = g++ -Wall -ansi -pedantic 
all:
$(CC) -O2 engine/core/*.cpp engine/objects3d/*.cpp engine/display/*.cpp engine/io  /*.cpp engine/math/*.cpp engine/messages/*.cpp  *.cpp -o project1 -lGL -lGLU -lX11 `sdl-config --cflags --libs`
clean:
@echo Cleaning up...
@rm project1
@echo Done.

但是我需要迁移到SCons。我不知道如何编写一个脚本来自动处理查找子目录中的所有 *.cpp 文件并将它们包含在编译过程中。

这是如何在SCons中执行Makefile中的内容。你应该把这个Python代码放在项目根目录下一个名为SConstruct的文件中,然后简单地执行scons。要清理,请执行scons -c

env = Environment()
env.Append(CPPFLAGS=['-Wall', '-ansi', '-pedantic', '-O2', '-lGL', '-lGLU', '-lX11'])
# Determine compiler and linker flags for SDL
env.ParseConfig('sdl-config --cflags')
env.ParseConfig('sdl-config --libs')
# Remember that the SCons Glob() function is not recursive
env.Program(target='project1',
            source=[Glob('engine/core/*.cpp'),
                    Glob('engine/objects3d/*.cpp'),
                    Glob('engine/display/*.cpp)',
                    Glob('engine/io/*.cpp'),
                    Glob('engine/math/*.cpp'),
                    Glob('engine/messages/*.cpp'),
                    Glob('*.cpp')])

下面是将 SDL 与 SCons 结合使用的链接。

这是关于SCons ParseConfig()函数的信息。