用于设置强大的中小型项目* nix构建的教程

时间:2009-12-31 05:44:08

标签: build-process unix

我主要是一个被宠坏的Windows + Visual Studio(或过去的Borland C ++或其他任何东西)开发人员。虽然我第一次与Unix接触是在大约20年前,而且我已经使用了Linux几年,但我对如何在* nix系统上建立构建的想法非常有限。

例如,我对make的基础知识很好 - 我可以获得许多文件来编译和链接。但我真的不知道如何设置以应对多种配置 - 如何让发布版本的所有目标文件和目标从调试版本等转到不同的文件夹等。是的,我可以RTFM和即兴创作有些东西,但我猜错了,我会即兴创作一些愚蠢,过于复杂,脆弱和WTF的东西,只要我知道常见惯例是什么,复制一个共同的约定会更有意义。

另外,我可以运行一个配置脚本,而且我模糊地意识到它们与autoconf相关联,不管是什么,但我不知道是否/为什么/如何在我的设置中使用这种东西自己的项目。

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

修改

我想我会用更长远的经验更新一下。

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

现在,我正在使用cmake。它生成makefile / visual studio项目/无论如何。它(到目前为止)处理了我需要做的所有事情,包括支持单元测试和自定义构建步骤。当我习惯了cmake的做法时,我发现这是一个很好的方法,允许我一次轻松地使用多套工具 - 我可以检查MinGW GCC中的测试覆盖率,同时在Visual Studio中进行调试。 / p>

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

cmake的缺点......

  1. 虽然它生成makefile / what,但它实际上不能被视为makefile生成器。生成的makefile依赖于正在安装的cmake。说实话,我真的不明白为什么他们不会为makefile平台完全删除makefile,只是直接进行构建,稍微减少了出问题的可能性。
  2. 开始并不容易。
  3. 第二点主要通过在这里提问来解决......

2 个答案:

答案 0 :(得分:3)

我强烈建议使用Make的一个较新的表兄弟而不是autoconf或makefile用于较小的项目。对你来说最好的一个(我最喜欢的那个)可能是premake4。为什么我建议呢?因为它非常简单易用,但功能强大,能够生成GNU Makefile,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" }    

答案 1 :(得分:1)

我会远离autoconf,直到你真正需要它,因为它使用起来非常复杂,在大多数小项目中,make就是你所需要的......

我没有教程,但是我会给你一个非常惊人的(在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

只需将Project替换为您的项目名称等等。

编辑: 从技术上讲,您需要获得伯克利的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.