代码之家  ›  专栏  ›  技术社区  ›  Steve314

用于设置健壮的中小型项目*nix build的教程

  •  3
  • Steve314  · 技术社区  · 16 年前

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

    例如,我对make的基本知识还可以,我可以得到大量的文件来编译和链接。但我真的不知道如何设置来应对多种配置-如何将发布版本的所有目标文件和目标文件从调试版本转移到不同的文件夹等。是的,我可以RTFM和即兴创作一些东西,但我很可能会即兴创作一些愚蠢、过度复杂、脆弱和WTF的东西,如果我知道共同约定是什么,那么复制共同约定会更有意义。

    此外,我可以运行一个配置脚本,我模糊地意识到它们与autoconf(自动功能)相关,但我不知道是否/为什么/如何在我自己的项目中设置此类内容。

    希望这足以让我大致了解我在寻找什么。当然,我可以在这里询问/搜索特定问题,但前提是我知道所有我几乎肯定不知道的正确问题。有什么建议吗?

    编辑

    现在,我正在使用cmake。它生成makefile/visualstudio项目/任何东西。到目前为止,它已经处理了我需要做的所有事情,包括对单元测试和定制构建步骤的支持。当我习惯了cmake的工作方式后,我发现这是一种很好的方式,允许我轻松地同时使用多套工具-我可以在MinGW GCC中检查测试覆盖率,同时在Visual Studio中进行调试。

    当然,这表明我仍然主要在Windows中工作——但来回切换比以往任何时候都要容易。

    cmake的缺点是。。。

    1. 尽管它生成了makefile/whatever,但它实际上不能被看作是一个makefile生成器。生成的makefile取决于安装的cmake。老实说,我真的不明白为什么他们不为makefile平台完全删除makefiles,而直接进行构建,稍微降低了出现问题的可能性。

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

    2 回复  |  直到 9 年前
        1
  •  3
  •   Kornel Kisielewicz    16 年前

    我强烈建议在较小的项目中使用Make的一个较新的表兄弟,而不是autoconf或makefile。对你来说最好的一个(也是我最爱的一个)可能是 premake4 极其

    下面是一个例子:

    -- 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" }    
    
        2
  •  1
  •   Earlz    16 年前

    在您真正需要它之前,我不会使用autoconf,因为它的使用非常复杂,在大多数小项目中,make是您所需要的全部。。。

    我没有教程,但我将为您提供一个非常棒的(可移植于BSD和GNU make之间)makefile,用于小项目。我从原来的BSD4.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
    

    编辑: 从技术上讲,你需要伯克利的BSD3条款许可证。。。根据:

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