2009-12-31 29 views
3

我大多是被宠坏的Windows + Visual Studio(或过去的Borland C++或其他)开发者。虽然我和Unix的第一次接触大约在20年前,而且我多年来一直在使用Linux,但我对如何在* nix系统上建立构建的想法非常有限。设置强大的中小型项目的教程* nix build

例如,我可以使用make的基础知识 - 我可以获取许多文件来编译和链接。但我真的不知道如何设置,以应付多种配置 - 如何将发布版本的所有目标文件和目标从调试版本等转到不同的文件夹等等。是的,我可以RTFM和即兴创作有些东西,但这是一个公平的猜测,我会即兴创作一些愚蠢,过度复杂,脆弱和WTF的东西,如果我只知道常用的约定是什么,那么它会更有意义地复制一个共同的约定。我可以运行一个配置脚本,并且我隐约意识到它们与autoconf相关,无论如何,但我不知道如果/为什么/我该如何设置这种类型的东西我自己的项目。

希望这足以说明我在找什么。当然,我可以在这里提出/搜索具体问题,但假设我知道所有正确的问题,以问我几乎肯定不会问的问题。那么 - 任何指针?

编辑

只是觉得应该有一些更长期的经验,更新此。

我尝试过使用premake一段时间,但从长远来看无法忍受它。在很大程度上,Lua背后有一种不喜欢的感觉。

现在,我正在使用cmake。它生成makefiles/visual studio项目/任何。它(迄今)处理了我需要做的所有事情,包括对单元测试和自定义构建步骤的支持。当我习惯cmake的做法时,我发现这是一种好方法,可以让我一次使用多套工具 - 我可以在MinGW GCC中同时检查测试覆盖率,同时在Visual Studio中进行调试。

这表明,当然,我仍然主要在Windows上工作 - 但来回切换比以往更容易。

虽然它产生的makefile /什么,它不能真正被视为一个Makefile生成CMake的缺点的...

  1. 。生成的makefile依赖于正在安装的cmake。说实话,我不明白为什么他们不会为makefile平台完全放弃makefile,只是直接进行构建,稍微减少潜在的问题。
  2. 开始并不容易。

第二点主要是通过在这里提问来解决......

+1

我想,而不是“被宠坏”你的意思是“剥夺” ... :) – Peter 2009-12-31 05:49:27

+0

@Peter - 我想这就像在基本编码。该构建按钮很好,并且易于入门,但随着规模的增加,您不知道您的浪费多少时间。 OTOH,虽然我从事过大型项目,但我从来没有对一个主要的可交付构建负责,所以我猜这个平台并不是我想要的。 – Steve314 2009-12-31 06:25:22

回答

3

我强烈建议使用Make的新堂兄弟之一,而不是autoconf或makefiles为较小的项目。对你来说最好的一个(我最喜欢的那个)可能是premake4。我为什么建议?因为它是极其简单易用,但功能非常强大,能够生成GNU Makefiles,Visual Studio项目,Code :: Blocks项目等等。预制文件非常清晰易读,使用您已熟悉的Visual Studio命名法。

下面是一个例子:

-- A solution contains projects, and defines the available configurations 
solution "MyApplication" 
    configurations { "Debug", "Release" } 

    -- A project defines one build target 
    project "MyApplication" 
     kind "ConsoleApp" 
     language "C++" 
     files { "inc/**.h", "src/**.cpp", "main.cpp" } 

     configuration "Debug" 
     defines { "DEBUG" } 
     flags { "Symbols" } 

     configuration "Release" 
     defines { "NDEBUG" } 
     flags { "Optimize" }  
+0

看起来很有趣。让我感到紧张的是许多不同工具的内置知识。工具来了,工具去了。旧的VC++ 6工作区和项目文件已经消失,尽管VC++依然存在 - 谁说.sln等将不会采用相同的方式?当然,这就是为什么将构建描述与特定于工具的文件格式分开是好事,但是再说一遍,谁说我不想在premake4放弃它们之后继续使用特定工具?但是,Lua的支持 - 是否意味着用户可以编写特定于工具包的文件生成脚本? – Steve314 2009-12-31 09:16:21

+0

如果不是使用GCC编译代码,我想使用使用略微不同的命令行语法的PCC? (注意PCC实际上是命令行兼容的) – Earlz 2009-12-31 14:30:19

+1

我在这个建议中尝试了premake4,这是迄今为止我见过的最好的构建系统。 – 2010-01-08 06:27:22

1

我就从autoconf的远离,直到你真正需要它,因为它是相当复杂的使用,并且在大多数小项目,使所有你需要...

我不h ave教程,但是我会给你一个非常了不起的(并且在BSD和GNU make之间可移植的)makefile,从小项目开始。我挖了出来原来的BSD 4.3汇编(AS)

HDRS = project.h 
OBJS = main.o 
LDFLAGS = 
project: ${OBJS} 
    ${CC} ${LDFLAGS} ${OBJS} -o project 
.c.o: ${HDRS} 
    ${CC} ${CFLAGS} -c $*.c 
clean: 
    rm -f *.o ${OBJS} project *.core a.out errs core 

只是你的项目名称,这样..

编辑替换项目: 从技术上说,你需要伯克利BSD 3条许可证。 ..按照:

 
* Copyright (c) 1982 Regents of the University of California. 
* All rights reserved. The Berkeley software License Agreement 
* specifies the terms and conditions for redistribution.