我正在尝试尽可能方便地配置 scons。我的构建脚本工作正常,但我仍然遇到一件事。
使用 make,如果我连续运行两次“make”,第二次将什么也不做,因为它会检测到目标是最新的(因为我刚刚构建了它)。
如何确保 scons 的行为相同?现在,如果我第二次运行 scons ,它认为需要再次构建目标,此外,由于所有剩余 .o 文件的依赖关系冲突(因为没有首先调用 clean ),它无法构建。
我怎样才能让 scons 自己处理这个问题,即检测目标是否过时,如果是,则相应地重建?
另外,我注意到如果我打电话
scons
scons -q
构建然后直接提问,退出状态仍然始终为 1。如果我理解正确,它应该是 0,因为目标是最新的。
任何帮助表示赞赏!
编辑:
这是我的 SConstruct 文件。如果我做错了什么,请提请我注意:
import os
env = Environment(CXX = "C:/MinGW/bin/g++", CCFLAGS = "-g")
env.Tool("mingw")
sourceList = list('./src/' + x for x in os.listdir("./src"))
pathList = ['./include',
'C:/boost',
'C:/frameworks/SFML/include',
'C:/Python27/include']
libPathList = ['C:/boost/stage/lib', 'C:/frameworks/SFML/lib', 'C:/Python27/libs']
libList = ['boost_thread-mgw45-mt-1_46_1',
'boost_python-mgw45-mt-1_46_1',
'sfml-system',
'sfml-window',
'sfml-graphics',
'python27']
env.Append(CPPPATH=pathList)
env.Append(LIBPATH=libPathList)
env.Append(LIBS=libList)
t = env.Program(target='./bin/build_result.exe', source=sourceList)
Default(t)
是的,我知道我应该添加适当的调试选项,但我可以稍后改进文件。但是,我不知道是否有任何与我遇到的问题有关的问题。此外,此文件完全适用于较小的测试项目:
import os
env = Environment(CXX = "C:/MinGW/bin/g++", CCFLAGS = "-g")
env.Tool("mingw")
sourceList = os.listdir('.')
sourceList = list(x for x in sourceList if x[-3:] == 'cpp')
t = env.Program(target='./result.exe', source=sourceList)
Default(t)
“scons -q”也按预期工作。知道发生了什么吗?