gpt4 book ai didi

Scons VariantDir() 编译时重复 CPPPATH 和 LIBPATH?

转载 作者:行者123 更新时间:2023-12-02 05:21:20 25 4
gpt4 key购买 nike

这是我的简单案例。我得到的源文件结构如下:

.
├── SConstruct
└── src
├── SConscript
├── staticLib
│   ├── classInStaticLib.cpp
│   ├── classInStaticLib.h
│   └── SConscript
└── test.cpp

S构造:

VariantDir('build', 'src', duplicate=0)
SConscript('build/SConscript')

src/SConscript:

import os
lib = 'staticLib'
SConscript(os.path.join(lib, 'SConscript'))
Program( 'test',
'test.cpp',
CPPPATH = lib,
LIBS = lib,
LIBPATH = lib )

src/staticLib/SConscript:

Library('staticLib', 'classInStaticLib.cpp')

运行 scons 后,我在 shell 中得到以下信息:

g++ -o build/staticLib/classInStaticLib.o -c src/staticLib/classInStaticLib.cpp
ar rc build/staticLib/libstaticLib.a build/staticLib/classInStaticLib.o
ranlib build/staticLib/libstaticLib.a
g++ -o build/test.o -c -Ibuild/staticLib -Isrc/staticLib src/test.cpp
g++ -o build/test build/test.o -Lbuild/staticLib -Lsrc/staticLib -lstaticLib

scons 已完成,没有错误。但请注意,第 4 行同时有“-Ibuild/staticLib”和“-Isrc/staticLib”,第 5 行同时有“-Lbuild/staticLib”和“-Lsrc/staticLib”。应该只有一个。

为什么会发生这种情况?

最佳答案

我认为发生这种情况是因为您正在使用 SCons VariantDir()函数,这会导致 SCons 在构建目录中查找。我从未见过它同时使用源目录和variant_dir目录。

VariantDir()函数通常仅在您不使用 SConscript() 时使用功能。尝试将调用更改为 SConscript()在你的SConstruct使用variant_dir参数并删除对 VariantDir() 的调用,如下:

SConscript('src/SConscript', variant_dir='build', duplicate=0)

我还会考虑更改 src/SConscript如下:

import os
lib = 'staticLib'
SConscript(os.path.join(lib, 'SConscript'),
variant_dir=os.path.join(lib, 'build'),
duplicate=0)
Program( 'test',
'test.cpp',
CPPPATH = lib,
LIBS = lib,
LIBPATH = lib )

这是我执行 scons 时得到的结果,顺便说一句,与你的结果相同:

$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o build/staticLib/classInStaticLib.o -c src/staticLib/classInStaticLib.cpp
ar rc build/staticLib/libstaticLib.a build/staticLib/classInStaticLib.o
ranlib build/staticLib/libstaticLib.a
g++ -o build/test.o -c -Ibuild/staticLib -Isrc/staticLib src/test.cpp
g++ -o build/test build/test.o -Lbuild/staticLib -Lsrc/staticLib -lstaticLib
scons: done building targets.

$ tree build/
build/
|-- staticLib
| |-- classInStaticLib.o
| `-- libstaticLib.a
|-- test
`-- test.o

1 directory, 4 files

我从来没有注意到 SCons 这样做,也无法解释为什么这样做。我尝试使用不同的variant_dir选项,但总是得到相同的结果。我想说你没有做错任何事,这是 SCons 特有的行为。

关于Scons VariantDir() 编译时重复 CPPPATH 和 LIBPATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21217008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com