Dependencies SCON不会忽略依赖项
我有以下文件系统结构Dependencies SCON不会忽略依赖项,dependencies,scons,ignore,Dependencies,Scons,Ignore,我有以下文件系统结构 +-sources+-A | + source files | +-B | + source files | +-C | + source files | sharedLib +-libA.so +-libB.so +-libC.so libB.so依赖于libC.so。libA.so依赖于libB.so 默认情况下,如果sources/C目录下的文件发生
+-sources+-A
| + source files
| +-B
| + source files
| +-C
| + source files
|
sharedLib
+-libA.so
+-libB.so
+-libC.so
libB.so依赖于libC.so。libA.so依赖于libB.so
默认情况下,如果sources/C目录下的文件发生更改,SCons将重建所有三个库。我只需要重建libC.so共享库,而不需要接触其他两个库。
我尝试添加environment.Ignore('sharedLib/libB.so','sharedLib/libC.so')
,但没有帮助。请告知。您需要的是功能
在我放在一起演示您的用例的一个最小示例中,这似乎工作得很好
>> scons --version
SCons by Steven Knight et al.:
script: v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[MODIFIED], 2015/07/31 14:36:10, by bdbaddog on hpmicrodog
engine: v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[MODIFIED], 2015/07/31 14:36:10, by bdbaddog on hpmicrodog
engine path: ['/usr/lib/scons/SCons']
Copyright (c) 2001 - 2015 The SCons Foundation
>> tree
.
├── SConstruct
├── sharedLib
└── sources
├── A
│ └── libA.cpp
├── B
│ └── libB.cpp
└── C
└── libC.cpp
5 directories, 4 files
>> cat SConstruct
import os
env = Environment()
libC = env.SharedLibrary('sharedLib/libC.so', 'sources/C/libC.cpp')
envAB = env.Clone()
envAB.Append(LINKFLAGS=['-lC'],
LIBPATH=['sharedLib'])
libA = envAB.SharedLibrary('sharedLib/libA.so', 'sources/A/libA.cpp')
envAB.Requires(libA, libC)
libB = envAB.SharedLibrary('sharedLib/libB.so', 'sources/B/libB.cpp')
envAB.Requires(libB, libC)
>> cat sources/A/libA.cpp
#include <iostream>
void A(void) {std::cout << "A" << std::endl;}
>> cat sources/B/libB.cpp
#include <iostream>
void B(void) {std::cout << "B" << std::endl;}
>> cat sources/C/libC.cpp
#include <iostream>
void C(void) {std::cout << "C" << std::endl;}
>> scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o sources/C/libC.os -c -fPIC sources/C/libC.cpp
g++ -o sharedLib/libC.so -shared sources/C/libC.os
g++ -o sources/A/libA.os -c -fPIC sources/A/libA.cpp
g++ -o sharedLib/libA.so -lC -shared sources/A/libA.os -LsharedLib
g++ -o sources/B/libB.os -c -fPIC sources/B/libB.cpp
g++ -o sharedLib/libB.so -lC -shared sources/B/libB.os -LsharedLib
scons: done building targets.
>> tree
.
├── SConstruct
├── sharedLib
│ ├── libA.so
│ ├── libB.so
│ └── libC.so
└── sources
├── A
│ ├── libA.cpp
│ └── libA.os
├── B
│ ├── libB.cpp
│ └── libB.os
└── C
├── libC.cpp
└── libC.os
5 directories, 10 files
>> echo "void E(void){}" >> sources/C/libC.cpp
>> cat sources/C/libC.cpp
#include <iostream>
void C(void) {std::cout << "C" << std::endl;}
void E(void){}
>> scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o sources/C/libC.os -c -fPIC sources/C/libC.cpp
g++ -o sharedLib/libC.so -shared sources/C/libC.os
scons: done building targets.
>> tree
.
├── SConstruct
├── sharedLib
│ ├── libA.so
│ ├── libB.so
│ └── libC.so
└── sources
├── A
│ ├── libA.cpp
│ └── libA.os
├── B
│ ├── libB.cpp
│ └── libB.os
└── C
├── libC.cpp
└── libC.os
5 directories, 10 files
>scons--版本
史蒂文·奈特等人的烤饼:
脚本:v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[修改],2015/07/31 14:36:10,由hpmicrodog上的bdbaddog编写
引擎:v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[修改],2015/07/31 14:36:10,由hpmicrodog上的bdbaddog开发
引擎路径:['/usr/lib/scons/scons']
版权所有(C)2001—2015 SCONS基金会
>>树
.
├── SConstruct
├── 共享数据库
└── 来源
├── A.
│ └── libA.cpp
├── B
│ └── libB.cpp
└── C
└── libC.cpp
5个目录,4个文件
>>cat结构
导入操作系统
env=Environment()
libC=env.SharedLibrary('sharedLib/libC.so','sources/C/libC.cpp')
envAB=env.Clone()
envAB.Append(LINKFLAGS=['-lC'],
LIBPATH=['sharedLib'])
libA=envAB.SharedLibrary('sharedLib/libA.so','sources/A/libA.cpp')
环境要求(libA、libC)
libB=envAB.SharedLibrary('sharedLib/libB.so','sources/B/libB.cpp')
envAB.Requires(libB,libC)
>>cat来源/A/libA.cpp
#包括
void A(void){std::cout cat sources/B/libB.cpp
#包括
void B(void){std::cout cat sources/C/libC.cpp
#包括
void C(void){std::cout scons
scons:正在读取SConscript文件。。。
scons:已完成读取SConscript文件。
斯科恩:建立目标。。。
g++-o sources/C/libC.os-C-fPIC sources/C/libC.cpp
g++-o sharedLib/libC.so-sharedsources/C/libC.os
g++-o sources/A/libA.os-c-fPIC sources/A/libA.cpp
g++-o sharedLib/libA.so-lC-sharedsources/A/libA.os-LsharedLib
g++-o源代码/B/libB.os-c-fPIC源代码/B/libB.cpp
g++-o sharedLib/libB.so-lC-sharedsources/B/libB.os-LsharedLib
斯科恩:完成了目标建设。
>>树
.
├── SConstruct
├── 共享数据库
│ ├── 利巴索
│ ├── libB.so
│ └── libC.so
└── 来源
├── A.
│ ├── libA.cpp
│ └── libA.os
├── B
│ ├── libB.cpp
│ └── libB.os
└── C
├── libC.cpp
└── libC.os
5个目录,10个文件
>>echo“void E(void){}”>>sources/C/libC.cpp
>>cat来源/C/libC.cpp
#包括
void C(void){std::cout scons
scons:正在读取SConscript文件。。。
scons:已完成读取SConscript文件。
斯科恩:建立目标。。。
g++-o sources/C/libC.os-C-fPIC sources/C/libC.cpp
g++-o sharedLib/libC.so-sharedsources/C/libC.os
斯科恩:完成了目标建设。
>>树
.
├── SConstruct
├── 共享数据库
│ ├── 利巴索
│ ├── libB.so
│ └── libC.so
└── 来源
├── A.
│ ├── libA.cpp
│ └── libA.os
├── B
│ ├── libB.cpp
│ └── libB.os
└── C
├── libC.cpp
└── libC.os
5个目录,10个文件
您需要的是功能
在我放在一起演示您的用例的一个最小示例中,这似乎工作得很好
>> scons --version
SCons by Steven Knight et al.:
script: v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[MODIFIED], 2015/07/31 14:36:10, by bdbaddog on hpmicrodog
engine: v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[MODIFIED], 2015/07/31 14:36:10, by bdbaddog on hpmicrodog
engine path: ['/usr/lib/scons/SCons']
Copyright (c) 2001 - 2015 The SCons Foundation
>> tree
.
├── SConstruct
├── sharedLib
└── sources
├── A
│ └── libA.cpp
├── B
│ └── libB.cpp
└── C
└── libC.cpp
5 directories, 4 files
>> cat SConstruct
import os
env = Environment()
libC = env.SharedLibrary('sharedLib/libC.so', 'sources/C/libC.cpp')
envAB = env.Clone()
envAB.Append(LINKFLAGS=['-lC'],
LIBPATH=['sharedLib'])
libA = envAB.SharedLibrary('sharedLib/libA.so', 'sources/A/libA.cpp')
envAB.Requires(libA, libC)
libB = envAB.SharedLibrary('sharedLib/libB.so', 'sources/B/libB.cpp')
envAB.Requires(libB, libC)
>> cat sources/A/libA.cpp
#include <iostream>
void A(void) {std::cout << "A" << std::endl;}
>> cat sources/B/libB.cpp
#include <iostream>
void B(void) {std::cout << "B" << std::endl;}
>> cat sources/C/libC.cpp
#include <iostream>
void C(void) {std::cout << "C" << std::endl;}
>> scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o sources/C/libC.os -c -fPIC sources/C/libC.cpp
g++ -o sharedLib/libC.so -shared sources/C/libC.os
g++ -o sources/A/libA.os -c -fPIC sources/A/libA.cpp
g++ -o sharedLib/libA.so -lC -shared sources/A/libA.os -LsharedLib
g++ -o sources/B/libB.os -c -fPIC sources/B/libB.cpp
g++ -o sharedLib/libB.so -lC -shared sources/B/libB.os -LsharedLib
scons: done building targets.
>> tree
.
├── SConstruct
├── sharedLib
│ ├── libA.so
│ ├── libB.so
│ └── libC.so
└── sources
├── A
│ ├── libA.cpp
│ └── libA.os
├── B
│ ├── libB.cpp
│ └── libB.os
└── C
├── libC.cpp
└── libC.os
5 directories, 10 files
>> echo "void E(void){}" >> sources/C/libC.cpp
>> cat sources/C/libC.cpp
#include <iostream>
void C(void) {std::cout << "C" << std::endl;}
void E(void){}
>> scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o sources/C/libC.os -c -fPIC sources/C/libC.cpp
g++ -o sharedLib/libC.so -shared sources/C/libC.os
scons: done building targets.
>> tree
.
├── SConstruct
├── sharedLib
│ ├── libA.so
│ ├── libB.so
│ └── libC.so
└── sources
├── A
│ ├── libA.cpp
│ └── libA.os
├── B
│ ├── libB.cpp
│ └── libB.os
└── C
├── libC.cpp
└── libC.os
5 directories, 10 files
>scons--版本
史蒂文·奈特等人的烤饼:
脚本:v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[修改],2015/07/31 14:36:10,由hpmicrodog上的bdbaddog编写
引擎:v2.3.6.rel_2.3.5:3347:d31d5a4e74b6[修改],2015/07/31 14:36:10,由hpmicrodog上的bdbaddog开发
引擎路径:['/usr/lib/scons/scons']
版权所有(C)2001—2015 SCONS基金会
>>树
.
├── SConstruct
├── 共享数据库
└── 来源
├── A.
│ └── libA.cpp
├── B
│ └── libB.cpp
└── C
└── libC.cpp
5个目录,4个文件
>>cat结构
导入操作系统
env=Environment()
libC=env.SharedLibrary('sharedLib/libC.so','sources/C/libC.cpp')
envAB=env.Clone()
envAB.Append(LINKFLAGS=['-lC'],
LIBPATH=['sharedLib'])
libA=envAB.SharedLibrary('sharedLib/libA.so','sources/A/libA.cpp')
环境要求(libA、libC)
libB=envAB.SharedLibrary('sharedLib/libB.so','sources/B/libB.cpp')
envAB.Requires(libB,libC)
>>cat来源/A/libA.cpp
#包括
void A(void){std::cout cat sources/B/libB.cpp
#包括
void B(void){std::cout cat sources/C/libC.cpp
#包括
void C(void){std::cout scons
scons:正在读取SConscript文件。。。
scons:已完成读取SConscript文件。
斯科恩:建立目标。。。
g++-o sources/C/libC.os-C-fPIC sources/C/libC.cpp
g++-o sharedLib/libC.so-sharedsources/C/libC.os
g++-o sources/A/libA.os-c-fPIC sources/A/libA.cpp
g++-o sharedLib/libA.so-lC-sharedsources/A/libA.os-LsharedLib
g++-o源代码/B/libB.os-c-fPIC源代码/B/libB.cpp
g++-o sharedLib/libB.so-lC-sharedsources/B/libB.os-LsharedLib
斯科恩:完成了目标建设。
>>树
.
├── SConstruct
├── 共享数据库
│ ├── 利巴索
│ ├── libB.so
│ └── libC.so
└── 来源
├── A.
│ ├── libA.cpp
│ └── libA.os
├── B
│ ├── libB.cpp
│ └── libB.os
└── C
├── libC.cpp
└── libC.os
5个目录,10个文件
>>echo“void E(void){}”>>sources/C/libC.cpp
>>cat来源/C/libC.cpp
#包括
void C(void){std::cout scons
scons:正在读取SConscript文件。。。
scons:已完成读取SConscript文件。
斯科恩:建立目标。。。
g++-o sources/C/libC.os-C-fPIC sources/C/libC.cpp
g++-o sharedLib/libC.so-sharedsources/C/libC.os
斯科恩:完成了目标建设。
>>树
.
├── s