标签: scons

嵌入式开发/交叉编译的最佳构建系统

我现在正在使用dsPIC进行一些开发,而我并不完全爱上MPLAB.我实际上正在使用带有makefile项目的Visual Studio.目前,在找到设置使用备用编译器有用指南之后,我正在使用SCons,它似乎工作得相当好.不过,我不禁想知道,有没有更好的构建系统呢?而且,有没有更好的方法让Scons这样做?

embedded build-process makefile build-system scons

6
推荐指数
1
解决办法
3211
查看次数

单元测试构建文件

单元测试构建文件的最佳策略是什么?

我问的原因是我的公司生产高度可靠的嵌入式设备.软件补丁不是一种选择,因为它们使我们的客户花费数千来分发.因此,我们有非常严格的代码质量程序(单元测试,代码审查,可追溯性等).这些程序正在应用于我们的构建文件(autotools,如果你必须知道,我希望可惜),但如果感觉像一个黑客.

呃...项目编译......将构建文件标记为已审核并进行单元测试.

必须有一个更好的方法.想法?

unit-testing makefile autotools cmake scons

6
推荐指数
1
解决办法
672
查看次数

你怎么做才能缩短编译器行?

通常,当我与其他人一起处理项目时,随着时间的推移,库文件路径的数量和包含在Makefile中由编译器获取的路径的数量会越来越多.路径也可以变得很长.

这是一个例子:

g++ -c -pipe -O2 -Wall -W -DQT_BOOTSTRAPPED -DQT_MOC -DQT_NO_CODECS
-DQT_LITE_UNICODE -DQT_NO_LIBRARY -DQT_NO_STL -DQT_NO_COMPRESS
-DQT_NO_DATASTREAM -DQT_NO_TEXTSTREAM -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES
-DQT_NO_THREAD -DQT_NO_REGEXP -DQT_NO_QOBJECT -DQT_NO_SYSTEMLOCALE
-DQT_NO_GEOM_VARIANT -DQT_NO_USING_NAMESPACE -D_LARGEFILE64_SOURCE
-D_LARGEFILE_SOURCE -I../../../mkspecs/qws/linux-generic-g++ -I.
-I../../corelib/arch/generic -I../../../include -I. -I../../../include/QtCore
-I. -I.uic/release-shared -o release-shared/moc.o moc.cpp
Run Code Online (Sandbox Code Playgroud)

我想知道你使用什么样的配方来使编译器行更短,同时仍然让用户可以选择显示原始行,如果他们以后真的需要这些信息.

有自动执行此操作的工具吗?

makefile compilation scons

6
推荐指数
2
解决办法
848
查看次数

是否可以自动生成Xcode项目?

简单的问题.是否有任何工具可以从命令行生成Xcode项目?我们使用SCons构建我们的跨平台应用程序,但这不支持内在的Xcode项目生成.我们希望避免手动创建项目,因为这将涉及维护多个文件列表.

xcode scons

6
推荐指数
2
解决办法
5410
查看次数

什么是SCons替代品?

我有C++,Java和Python的项目.C++中的项目导出SWIG接口,因此Java和Python项目可以使用它们.

我的问题是:我可以使用什么构建机制来管理依赖项并构建这些项目?

我使用过SCons和GYP.它们相当容易使用并允许插件(代码生成器,编译器,打包器).我想知道是否有替代方案,特别是对C++,Java和Python的原生支持.

我在Linux平台上开发,但我希望能够构建mac并赢得平台.

c++ python java scons gyp

6
推荐指数
2
解决办法
2059
查看次数

使用scons管理版本的最佳实践?

我希望我的Qt/C++应用程序知道它是哪个版本.它应该知道不是来自某些配置文件,而是将版本号编译成应用程序二进制文件.版本本身就是字符串,如"XYZ",其中X是主要版本号,Y是次要版本号,Z是SVN下的修订版(或SVN下的版本号减去版本"XY0"出来时的版本号) .您认为用scons实现这一目标的最简单方法是什么?

c++ qt scons

6
推荐指数
1
解决办法
999
查看次数

SCons:依赖周期?

我正在尝试让SCons将源文件中的Makefile项目复制到构建目录并运行一些命令来生成libmoo.a,但我遇到了一个依赖循环错误.细节如下:

./SConstruct:

env = Environment()
Export('env')

dirs = ['.']

variant_dir = 'build'

for dir in dirs:
        SConscript(dir + '/' + 'SConscript', variant_dir=variant_dir + '/' + dir, duplicate=0)
Run Code Online (Sandbox Code Playgroud)

./SConscript:

import os
Import('env')

env.Command(env.Dir('moo2').abspath, env.Dir('#moo').abspath, ["echo copying moo to the build dir", Copy("$TARGET", "$SOURCE")])

env.Command(env.Dir('moo2/Makefile').abspath, env.Dir('moo2').abspath, 'echo would run moo2.configure')

moolib = env.Command(env.Dir('moo2/libmoo.a').abspath, env.Dir('moo2/Makefile').abspath, 'echo would run make')

Default(moolib)
Run Code Online (Sandbox Code Playgroud)

运行scons时出错:

scons: *** Found dependency cycle(s):
  build/moo2/Makefile -> build/moo2 -> build/moo2/Makefile
  build/moo2/libmoo.a -> build/moo2 -> build/moo2/Makefile -> build/moo2/libmoo.a
Run Code Online (Sandbox Code Playgroud)

也试过不使用.abspath,但这不重要,对吧?

我没有看到任何周期:

  • build/moo2/libmoo.a需要build/moo2/Makefile
  • build/moo2/Makefile需要build/moo2
  • build/moo2需要(source …

scons

6
推荐指数
1
解决办法
3960
查看次数

scons - 编译后运行程序

我想在编译后直接运行构建的程序,以便我可以构建和启动我的程序scons.

我认为这个SConstruct-File会在重建时启动程序.

main = Program( "main", [ "main.cc" ] )

test = Command( None, None, "./main >testoutput" )
Depends( test, main )
Run Code Online (Sandbox Code Playgroud)

每次我跑,这都会启动它 scons

main = Program( "main", [ "main.cc" ] )

test = Command( None, None, "./main >testoutput" )
Requires( test, main )
Run Code Online (Sandbox Code Playgroud)

但两者都不起作用,我的程序永远不会被执行.我究竟做错了什么?

c++ python scons

6
推荐指数
1
解决办法
5122
查看次数

SCons和Shake之间的差异

我正在研究Python/Haskell项目,我正在寻找替代方案Makefile.明显的选择是Python SCons和Haskell Shake.由于我对其中任何一个都没有经验,我想问一下他们的缺点和优点是否有任何比较.

更新:该项目对构建有一些复杂的要求:

  • 让用户配置类似构建的选项以启用/禁用,工具路径等.
  • 在编译时生成Haskell和Python文件.他们的依赖应该正常工作.
  • 有多个Haskell程序共享大多数源文件.我想这样:
    • 可以单独构建每个,而不是构建不需要的源;
    • 编译多个程序时,源文件不会多次构建;
    • 如果可能的话,在编译期间实现并行性.
  • 检查目标系统及其路径(如一些安装的程序python,flock等等)
  • 检查目标系统的依赖关系,包括Python,Haskell.
  • 根据依赖关系参数化构建 - 如果缺少测试的依赖关系,仍然可以构建项目,跳过测试(并通知用户).

haskell build scons shake-build-system

6
推荐指数
1
解决办法
685
查看次数

强制SCons在64位Windows上使用32位MSVC编译器

我正在尝试使用clVisual Studio 2010来构建32位版本的Mixxx.Mixxx使用SCons构建.我的计算机是Windows 7 64位,安装了太多版本的Visual Studio.

下面这些说明,我已经尝试了组合的各种和变化setenv以及vsvars但是不管我做什么,我结束了在这种情况下,在命令行:

> cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]
Run Code Online (Sandbox Code Playgroud)

好的,所以cl指向"版本16,x86" - 太棒了.

> scons toolchain=msvs force32=1 winlib=%cd%\winlib\x86 sqlitedll=0 staticlibs=1 asmlib=0

[... bunch of output truncated, until we start using the compiler ...]

cl /Fores\qrc_mixxx.obj /c res\qrc_mixxx.cc /TP /Zc:wchar_t- /GL /MP /fp:fast …
Run Code Online (Sandbox Code Playgroud)

scons cl

6
推荐指数
2
解决办法
3693
查看次数