【发布时间】:2020-08-03 07:03:03
【问题描述】:
我的项目结构如下:
/project
/src_dirs
/src_dir_1
/...
/include_dirs
/inc_dir_1
/...
/output
SConstruct
/Sconscripts
lib1_sconscript
lib2_sconscript
/...
objects/
/...
libs/
/...
从output 目录调用的构建过程。所以sconscripts 中的所有路径都相对于output 目录。我的sconscript 文件是自动生成的。正如您在下面看到的,源文件和包含文件的路径是相对路径。这是一个演示 sconscript 文件:
Import('libaEnv')
includes = ['../../project/include_dirs/inc_dir_1/be/cmn/inc', '../../project/include_dirs/inc_dir_1/be/be/cmn/api_inc']
directives = ['-CC','-c','-g']
code_switches = ['FAST_RUNG_MLK', 'EN_PRIORITY']
listDefines = code_switches
linkLibs = []
crt = libaEnv.Object(target='objects/crt.o', source='../../project/src_dirs/src_dir_1/crt.c', CPPDEFINES=listDefines, CPPFLAGS=directives, CPPPATH=includes)
ert = libaEnv.Object(target='objects/ert.o', source='../../project/src_dirs/src_dir_1/ert.c', CPPDEFINES=listDefines, CPPFLAGS=directives, CPPPATH=includes)
urt = libaEnv.Object(target='objects/urt.o', source='../../project/src_dirs/src_dir_1/urt.c', CPPDEFINES=listDefines, CPPFLAGS=directives, CPPPATH=includes)
liba = libaEnv.Library (target='libs/liba.a', source=[crt,ert,urt])
Return('liba')
我已经看到 scons 使用源文件和头文件的绝对路径调用编译器。我通过使用-verbose 运行scons 看到了这一点(我还通过在spawn 方法中打印Action.py 中的命令行来验证这一点)。
我的 scons 版本是:SCons 2.5.1,我正在使用python 2.7 运行。
如何强制 scons 仅使用相对路径调用 compiler?
【问题讨论】:
-
您是否正在尝试构建/添加到您下载的某些使用 SCons 作为构建系统的软件包?默认情况下,SCons 应该使用相对于 SConstruct 位置的路径构建(尽管您可以使用一些命令行标志更改基本目录)。此外,您使用的是旧版本的 SCons。你有机会使用 4.0.1 和 python 3.5+ 吗?
-
@bdbaddog-路径是相对于 sconscript 文件生成的。 scons 成功调用了编译器。但是所有使用绝对路径调用的命令。 scons 采用路径并将它们转换为绝对路径。我不想要这种行为。实际上我有一些使用 python 2.7 和 scons 2.5.1 运行的复杂应用程序,所以这不是短期的选择。
-
这不是默认的 SCons 行为。默认行为是相对于 SConstruct 位置的路径。有什么理由不能只使用 py3 来运行 SCons 4.01?你是在修改 CCCOM 之类的变量吗?
标签: scons sconscript