Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependencies SCON不会忽略依赖项_Dependencies_Scons_Ignore - Fatal编程技术网

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