Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么时候开信用证+;项目需要配置文件吗?_C++_C_Configure - Fatal编程技术网

C++ 什么时候开信用证+;项目需要配置文件吗?

C++ 什么时候开信用证+;项目需要配置文件吗?,c++,c,configure,C++,C,Configure,我看到的几乎每一个c/c++开源项目都附带一个configure文件 但是在我们自己的c/c++项目中,到目前为止我还没有看到这个文件 什么时候需要它?当手工创建Makefile变得太复杂时。在构建使用。Autotools是一组工具,旨在最大限度地提高应用程序在各种POSIX和类似POSIX的操作环境之间的可移植性,这些操作环境在应用程序所需的基本集之外可能具有稍有不同的功能 TL;DR:configure在您希望在多个不同操作系统之间实现可移植性时很重要。我想您所说的是用于构建项目的配置脚本

我看到的几乎每一个c/c++开源项目都附带一个
configure
文件

但是在我们自己的c/c++项目中,到目前为止我还没有看到这个文件


什么时候需要它?

当手工创建Makefile变得太复杂时。

在构建使用。Autotools是一组工具,旨在最大限度地提高应用程序在各种POSIX和类似POSIX的操作环境之间的可移植性,这些操作环境在应用程序所需的基本集之外可能具有稍有不同的功能


TL;DR:
configure
在您希望在多个不同操作系统之间实现可移植性时很重要。

我想您所说的是用于构建项目的配置脚本


configure
文件的主要目的是生成适合您的系统配置的
makefile
,并检查各种先决条件(例如,已安装的libs)。

configure由autoconf从GNU Autotools生成。您可以使用autoconf和automake来管理项目的构建系统;如果您不想或不能依赖IDE的存在,自动工具是管理生成和安装代码的另一种方法。操作系统的可移植性是他们帮助解决的另一个主要问题,尽管主要是在不同的基于UNIX的系统之间,这不再是一个问题


更简洁地说,如果你厌倦手工编辑MaX文件或者需要中断IDE,请考虑使用AutoToo工具或其替代方案,如CMake或SCONS。

A<代码>配置< /COD>脚本基本上有三个用途:

  • 检测可选库的可用性(或用户偏好),或检查是否存在以及使用程序所依赖的必需库所需的正确选项
  • 在标准库函数缺失或行为不符合标准规定的坏操作系统周围工作
  • 通过检测您不必关心的系统参数并将其报告给您的程序,解决程序中不可移植的假设
  • 目的3对于正确编写的代码来说总是无用的。例如,没有理由需要在预处理器级别了解
    sizeof(int)
    。如果需要特定的大小,请使用固定大小的整数类型,如
    int32\u t
    (作为第2点的一部分,configure可以修补缺少它的损坏系统)。同样,您不应该编写行为取决于
    malloc(0)
    是否返回
    NULL
    或“可以成功传递到
    free
    的唯一指针”的程序。(是的,有很多坏掉的软件真的很在乎!)

    目的2在历史上对基本系统软件的GNU版本变得如此普遍的方式非常重要,因为它支持大量的专有Unice,其中包含损坏的编译器和库,并提供比本机工具通常能够提供的更好的质量。如今,每一个类Unix系统都有完全或几乎与POSIX兼容的构建和运行时环境,您可以通过使用
    -D_POSIX_C_SOURCE=(版本在这里)
    以及可能对shell的
    $PATH
    进行一些添加来获得它们。因此,除非您试图支持非POSIX系统,如Windows(没有cygwin),否则Purpose2现在通常已经过时并且有害

    目标1仍然非常相关,不会很快消失


    有些项目,可以说是出于很好的理由,不喜欢GNU自动工具,拒绝使用其中任何一个,要么省略
    configure
    ,要么自己滚动。如果第一个目的只需要
    configure
    ,那么如果您了解所有潜在的问题并知道如何编写可移植的shell脚本,那么这种方法可能是有意义的。但是,如果您这样做,请务必学习并遵循所有关于选项(如
    --启用-*
    --前缀
    ,等等)和变量(
    CFLAGS
    CPPFLAGS
    ,等等)如何工作的
    配置
    约定,以免给用户造成噩梦。请记住,使用autoconf可能更容易,也更值得一做——但请避免浪费每个人的时间让它检查诸如
    sizeof(int)
    之类的愚蠢事情,或者检查Fortran编译器是否工作。

    可能它包含CMakeLists.txt?我想没有。CMakeLists.txt用于cmake构建系统
    configure
    文件通常由
    autotools
    @Begemoth使用,没有,只有
    Makefile
    。强烈建议阅读关于autotools的易于理解的维基百科文章。你能举一个小例子来说明
    configure
    是如何使便携的吗?
    configure
    本身不能。生成它的工具以及这些工具使用的模板文件是使应用程序可移植的原因。这是Automake和CMake的工作,而不是autoconf。我们什么时候需要检查前提条件,我们能在必要时在运行时检测到它吗?假设一个特定的编译器在一个操作系统上可用,而另一个编译器在另一个操作系统上可用。对于每个操作系统,构建程序(以及生成文件)的命令必须是不同的。配置文件的任务是检测这些差异并为您的系统生成适当的makefiles。@wireshark:它还可以检查您的系统上是否安装了适当的LIB(以防止以后出现编译或链接错误),如果需要,可以获取一些系统信息(主机名、版本等),查找特定可执行文件(例如,lex)的路径,检查某些使用的工具是否支持特定选项。