单元测试构建文件的最佳策略是什么?
我问的原因是我的公司生产高度可靠的嵌入式设备.软件补丁不是一种选择,因为它们使我们的客户花费数千来分发.因此,我们有非常严格的代码质量程序(单元测试,代码审查,可追溯性等).这些程序正在应用于我们的构建文件(autotools,如果你必须知道,我希望可惜),但如果感觉像一个黑客.
呃...项目编译......将构建文件标记为已审核并进行单元测试.
必须有一个更好的方法.想法?
通常,当我与其他人一起处理项目时,随着时间的推移,库文件路径的数量和包含在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)
我想知道你使用什么样的配方来使编译器行更短,同时仍然让用户可以选择显示原始行,如果他们以后真的需要这些信息.
有自动执行此操作的工具吗?
简单的问题.是否有任何工具可以从命令行生成Xcode项目?我们使用SCons构建我们的跨平台应用程序,但这不支持内在的Xcode项目生成.我们希望避免手动创建项目,因为这将涉及维护多个文件列表.
我有C++,Java和Python的项目.C++中的项目导出SWIG接口,因此Java和Python项目可以使用它们.
我的问题是:我可以使用什么构建机制来管理依赖项并构建这些项目?
我使用过SCons和GYP.它们相当容易使用并允许插件(代码生成器,编译器,打包器).我想知道是否有替代方案,特别是对C++,Java和Python的原生支持.
我在Linux平台上开发,但我希望能够构建mac并赢得平台.
我希望我的Qt/C++应用程序知道它是哪个版本.它应该知道不是来自某些配置文件,而是将版本号编译成应用程序二进制文件.版本本身就是字符串,如"XYZ",其中X是主要版本号,Y是次要版本号,Z是SVN下的修订版(或SVN下的版本号减去版本"XY0"出来时的版本号) .您认为用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,但这不重要,对吧?
我没有看到任何周期:
我想在编译后直接运行构建的程序,以便我可以构建和启动我的程序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)
但两者都不起作用,我的程序永远不会被执行.我究竟做错了什么?
我正在研究Python/Haskell项目,我正在寻找替代方案Makefile.明显的选择是Python SCons和Haskell Shake.由于我对其中任何一个都没有经验,我想问一下他们的缺点和优点是否有任何比较.
更新:该项目对构建有一些复杂的要求:
python,flock等等)我正在尝试使用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)