标签: scons

使用SCons实现"安装"目标

我尝试设置一个构建系统来构建一个共享的lib MySharedLib和一个依赖MySharedLib的二进制MyBinary.构建系统应该能够在被要求时安装MySharedLibMyBinary,并且只有在被要求时才能安装.

import os.path

env = Environment()
env.Append(CCFLAGS='-g -Wall -ansi -O2')

prefix = '/usr/local'
lib_dir = os.path.join(prefix, 'lib')
bin_dir = os.path.join(prefix, 'bin')
Export('env prefix lib_dir bin_dir')

libMySharedLib = SConscript('libMySharedLib/SConscript')
MyBinary   = SConscript('MyBinary/SConscript')

env.Alias('install', env.Install(lib_dir, libMySharedLib))
env.Alias('install', env.Install(bin_dir, MyBinary))
Run Code Online (Sandbox Code Playgroud)

当我在没有命令行参数的情况下运行SCons时,会构建MySharedLib和MyBinary,但它也会尝试安装它们.我希望它们只在我要求安装目标时安装.我尝试了很多次,阅读了文档,但我无法弄明白.

scons

5
推荐指数
1
解决办法
4997
查看次数

scons - 如何运行/后/所有目标已经建立

我最近选择了scons来为中型C++项目实现一个多平台构建框架.构建生成了一堆单元测试,应该在它的最后调用.如何实现这种目标?

例如,在我的顶级sconstruct中,我有

subdirs=['list', 'of', 'my', 'subprojects']
for subdir in subdirs:
    SConscript(dirs=subdir, exports='env', name='sconscript',
       variant_dir=subdir+os.sep+'build'+os.sep+mode, duplicate=0)
Run Code Online (Sandbox Code Playgroud)

每个subdir都有它的单元测试,但是,因为dll和它们内置的可执行文件之间存在依赖关系 - 我想保持测试的运行,直到所有的子目录都已构建和安装(我的意思是,使用env.Install ).

我应该在哪里编写循环来迭代构建的测试并执行它们?我试着把它放在这个循环之后 - 但是因为scons不能让你控制执行的顺序 - 它会在我想要之前执行得很好.

请帮助一个scons新手.:)

谢谢,

build-automation unit-testing scons

5
推荐指数
2
解决办法
6260
查看次数

SCons设置为分层源但单个目标

我有一个C++/Python项目,我一直在努力,到目前为止依赖Visual Studio来管理构建.现在我想自动化构建过程,希望包括多个平台支持(它是所有标准的C++/Python),并认为SCons可以成为完成工作的工具.

在多个目录中涉及很多源文件,但(立体声)典型示例如下:

foo.lib
  directory_1
    bar1_1.cpp
    bar1_2.cpp
    ... etc. ...
  directory_2
    bar2_1.cpp
    bar2_2.cpp
    ... etc. ...
Run Code Online (Sandbox Code Playgroud)

换句话说,源文件在层次结构中,但只有一个目标.(层次结构在代码中使用的命名空间中匹配,但这对于此问题而言是多余的.)

我的问题是:构建SConstruct和SConscript文件的最佳方法是什么?我阅读了SCons文档,特别是Hierarchical Builds部分以及使用具有合适的'SConscript'调用的多个SConscript文件的想法.一切似乎都很清楚,特别整洁.但是,它似乎适用于具有多个目标的层次结构.只有一个目标,我可以使用同样的功能吗?

(我确实想到了一个顶级的SConstruct/SConscript文件,至少对于有问题的库来说,列出了所有带有子目录的源文件,但并没有"感觉"这是最好的方法.也许这确实是前进之路?)

非常感谢任何建议/见解.

c++ python build scons

5
推荐指数
2
解决办法
2427
查看次数

在Windows 7 cmd上运行Scons 2.2.0

我在Windows 7上的Python 2.7中安装了SCons 2.2.0.当从cmd运行"scons"时,我收到错误消息"scons无法识别并且内部或外部命令"我如何解决这个问题?


问题是scons-2.2.0-setup.exe没有在系统中设置路径.scons.bat和scons-2.2.0.bat都可以在"C:/ Python27/Scripts"文件夹中找到.将此设置为路径确实可以解决问题.现在,当尝试编译一个简单的C++文件并且消息"cl"未被识别为内部或外部命令时,会出现一个新问题.(Windows 7 64位).请任何想法可能会有所帮助.

windows cmd scons

5
推荐指数
1
解决办法
1万
查看次数

计算SCons中的构建时间

我有一个包含二进制文件和一组依赖的静态库的项目。我正在尝试建立每个库所花费的时间而没有成功。

我曾尝试使用它AddPreAction()/AddPostAction()来计算经过的时间,但是AddPreAction()一旦库所依赖的所有源文件都已编译(即有意义),就会被调用。

有一个与此问题有关的帖子:

如何测量scons构建的每个组件的构建时间?

但是我宁愿寻找一种更优雅的解决方案,而不是覆盖一些环境变量,然后不得不解析输出以计算时间。

提前致谢。

time scons

5
推荐指数
1
解决办法
957
查看次数

如何使用scons 2.3 visual express 2012构建c ++项目?

我尝试:

env = Environment(ENV = {'PATH' : os.environ['PATH'], \
            'INCLUDE' : 'c:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\VC\\include\\', \
            'LIB' : 'c:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\VC\\lib\\'})
Run Code Online (Sandbox Code Playgroud)

但它不起作用.错误信息:"cl"不是命令...

我在scons wiki中找到了描述(http://www.scons.org/wiki/PlatformSpecificNotes#Visual_C.2B-.2B-):如果使用Microsoft Visual C++,则需要设置'INCLUDE','LIB'和'PATH '在您的环境中,然后在创建'环境'对象时导入它们.这些将用于定位MSVC++工具并设置'CPPFLAGS'等.

我究竟做错了什么?

完整的sconstruct(它适用于ubuntu,以及带有mingw的windows):

import os
import sys

if ARGUMENTS.get('ndk', 0):
    current_dir = os.getcwd()#os.path.dirname(os.path.abspath(__file__))
    os.environ["NDK_PROJECT_PATH"] = current_dir + '/android-project'
    os.system("ndk-build") # use V=1 if can't compile for android
    exit(0)

if ARGUMENTS.get('ant', 0):
    current_dir = os.getcwd()#os.path.dirname(os.path.abspath(__file__))
    android_prj_path = current_dir + '/android-project'
    os.chdir(android_prj_path)
    os.system("ant debug") # use V=1 if can't …
Run Code Online (Sandbox Code Playgroud)

c++ scons visual-c++

5
推荐指数
1
解决办法
2516
查看次数

有没有办法让XCode构建设置根据构建ACTION(例如,清理,重建)而变化?

我正在努力弄清楚究竟是如何schemes工作的xcode以及它们的用途.我有一个使用外部构建系统(scons)在OS X上构建的跨平台产品.我希望能够构建/调试Xcode,主要是因为符号搜索和调试器.我一直在使用eclipse CDT哪个效果很好,但有一些怪癖.

我可以通过创建一个空项目并添加一个"外部构建系统"目标来实现这一点.然后,作为目标的'Info'的一部分,我将'Build Tool'指定为/ usr/local/bin/scons,'Arguments'是我发送给scons的构建参数.基本上我调用了以下构建变量$(TARGET),$(BUILD_TYPE)这些变量根据构建是调试还是发布而有所不同,因此可以将它们指定为条件"构建设置".

问题是我想Menu->Project->Clean工作.它看起来像Xcode/xcodebuilder使用$(ACTION)变量来这个消息传给其他-这里$(ACTTION)要么是"打造","干净",或其他一些建设行动.请参阅xcodebuild ACTION.Scons有点不同 - 它有一个内置的清理动作,在命令行上调用scons -c.所以我的第一个想法是使用条件"构建设置"来传递这个参数,但事实证明,条件"构建设置"似乎并没有因构建而异ACTION- 只是构建体系结构和SDK.

是否可以在"构建设置"中添加表达式Xcode/xcodebuilder?还有另一种好方法可以让'清洁'Xcode与scons 一起工作吗?

xcode scons xcodebuild

5
推荐指数
1
解决办法
2645
查看次数

如何使Cygwin成为Jenkins的默认外壳?

我正在尝试为使用SCons编写的构建提供一些明智的解决方案,该解决方案依赖于许多应用程序,这些应用程序可以通过类Unix的方式,使用类Unix的路径等进行访问。但是,当我尝试要使用SCons插件或Jenkins中的Git插件,它会尝试使用类似的方法来调用这些插件cmd /c git.exe-这肯定会失败,因为Git是使用Cygwin安装的,并且仅在Cygwin shell中是已知的,而在CMD中却不是。但是,即使我可以将git和其余的内容提供给cmd.exe,也会出现其他问题:Cygwin版本的Git希望路径具有正斜杠,并将反斜杠视为转义字符。与Windows Windows文件系统相关的问题也随之而来(我无法授予Jenkins删除自己的文件的权限!)。

因此,有没有办法使Jenkins仅使用Cygwin Shell,而不使用cmd.exe?还是应该准备在VM中运行某些Linux来处理此问题?

cygwin build scons jenkins

5
推荐指数
1
解决办法
1万
查看次数

如何调试SCons脚本

我有一个需要调试的SCons脚本。在发生的所有事情中的某个地方,我遇到了问题,我需要找出问题的根源。

我想调试SCons脚本,但是不确定如何设置它。我同时拥有PyCharm和Komodo IDE,但是我不知道如何使它们工作。

我已经试过了:

scons --debug=pdb <args...>
Run Code Online (Sandbox Code Playgroud)

但这使我陷入了SCons的困境;我需要进入我创建的SCons运行的脚本的内部。

有人可以告诉我如何设置PyCharm或Komodo来调试SCons脚本吗?如果那不可能,那么我可以使用其他调试选项。

debugging komodo scons pycharm

5
推荐指数
1
解决办法
2498
查看次数

SCons ImportError-没有名为SCons.Script的模块吗?

我一直在努力使SCons现在工作很长时间,但尚未成功。在进行其他所有操作之前:我正在运行Windows 7 x64。

我首先在其中安装了Python 2.7.11,C:\Software\Python27并将这两个目录都添加C:\Software\Python\Scripts到了系统路径中(对于所有用户而言)。然后,我在中安装了SCons C:\Software\Python27\Lib\site-packages\scons-2.4.1,并在前面提到的scripts-directory(SCons安装msi默认使用的目录)中安装了脚本。

现在,当我尝试运行SCons时,出现以下错误消息:

导入失败。在以下位置找不到SCons文件:

...

ImportError:没有名为SCons.Script的模块

导入失败。 在以下位置找不到SCons文件

作为用户,我真的不知道错误的出处,除了SCons无法解决它自己的导入。

我通过创建一个新文件夹来创建它C:\Software\Python27\Scripts\scons-local,并将SCons安装文件夹(...\Python27\Lib\site-packages\scons-2.4.1)的内容移动到新创建的文件夹中,从而使它起作用。但这给了我一个语法错误:

SyntaxError:语法无效

我在这里发现此错误是由于我的Python版本不支持条件表达式,因为Python 2.4及更高版本支持这种表达式。事实是,我正在使用Python 2.7.11,因此我不应该收到此错误。

Python版本

在此先感谢您的帮助!

python scons

5
推荐指数
1
解决办法
2683
查看次数