1

可能很难相信,但我仍然很难完全理解什么是构建环境。多年来我一直认为它是一个目录树,我的编译器可以在其中找到所有必要的头文件lib文件来构建我的项目。我从来没有真正正确地学习过这个概念,直到最近才对它有了基本的了解。

我正在使用 TDM-GCC 64 位编译器、MSYS、Windows 7 64 位。

当我构建我的库以用于我的项目时,它们都将头文件和 lib 文件放入我的 C:\mingw 目录中.. 即.. C**:\mingw\include & C:\mingw\lib**

假设我正在构建 zlib。zlib 目录将包含 lib 和 include 头文件,我的根 c:\mingw 目录还将包含这些目录中的 zlib 头文件和 lib 文件 c:\mingw\include & c:\mingw\lib 目录。

因此,当我构建需要 zlib 作为依赖项的其他库时,我最初使用以下命令: ./configure --prefix = c:\mingw 当我使用“ make ”命令(全部在 MSYS 中)构建它时,我的新库可以在 c:\mingw\include & c:\mingw\lib 目录中找到它的所有依赖项。 我做对了吗?

这就是我感到困惑的地方。 当我在使用相同编译器 TDM-GCC 64 位的 CodeBlocks IDE 中编写项目时,我是将搜索目录设置为 c:\mingw\include & c:\mingw\lib 目录还是使用 zlib 目录 c:\zlib\include 和 c:\zlib\lib 目录?

或者.....我是否应该将整个 zlib 目录放在 c:\mingw 目录中,以便我的文件路径如下所示:
c:\mingw\zlib\include & c:\mingw\zlib\lib 目录

如果我对以上所有内容都错了,我该如何在 Windows 上建立一个健壮的构建环境?

另外....为了补充我的知识空白,是否有任何书籍/教科书可以很好地解释这种事情?

我决定暂时不使用 cygwin。

很多问题;)

谢谢,对不起,长篇大论。

*******下面的后期添加*************

我在 c:\ming 中放置了一个测试文件,并使用我的 cmd 行调用了命令 gcc -v test.h (test.h 是我放置在根目录中的测试文件,用于测试我的编译器的搜索路径。这是输出:

如您所见,当使用 --prefix 时,其他包含目录: C:/mingw/lib/gcc/x86_64-w64-mingw32/5.1.0/include 被忽略。我想知道为什么 mingw 编译器会这样做。

我无法让我的编译器搜索的文件 (math.h) 甚至不在包含目录中。

C:\mingw\include>gcc -v test.h
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/5.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-5.1.0/configure --build=x86_64-w64-mingw32 --enable-targets=all --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable-libgomp --enable-lto --enable-graphite --enable-cxx-flags=-DWINPTHREAD_STATIC --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-libstdcxx-debug --enable-threads=posix --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libstdcxx-threads --enable-libstdcxx-time --with-gnu-ld --disable-werror --disable-nls --disable-win32-registry --prefix=/mingw64tdm --with-local-prefix=/mingw64tdm --with-pkgversion=tdm64-1 --with-bugurl=http://tdm-gcc.tdragon.net/bugs
Thread model: posix
gcc version 5.1.0 (tdm64-1)
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64'
 C:/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/5.1.0/cc1.exe -quiet -v -iprefix C:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/ -D_REENTRANT test.h -quiet -dumpbase test.h -mtune=generic -march=x86-64 -auxbase test -version -o C:\Users\user\AppData\Local\Temp\cco9AQmC.s --output-pch=test.h.gch
GNU C11 (tdm64-1) version 5.1.0 (x86_64-w64-mingw32)
        compiled by GNU C version 5.1.0, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.2
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring duplicate directory "C:/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/5.1.0/include"
ignoring duplicate directory "C:/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../include"
ignoring duplicate directory "C:/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/5.1.0/include-fixed"
ignoring duplicate directory "C:/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/include"
#include "..." search starts here:
#include <...> search starts here:
 C:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/include
 C:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../include
 C:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/include-fixed
 C:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/include
End of search list.
GNU C11 (tdm64-1) version 5.1.0 (x86_64-w64-mingw32)
        compiled by GNU C version 5.1.0, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.2
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 72fdcf42c4c1c584c8e1347f320364c3
In file included from pngconf.h:30:0,
                 from test.h:422:
C:/mingw/include/limits.h:32:23: fatal error: tr1/climits: No such file or directory
compilation terminated.

C:\mingw\include>
4

1 回答 1

1

我不能谈论您的构建环境,但我可以澄清几点。

在 *nix 系统上,当您使用 构建(zlib,根据您的示例)时configure --prefix=$PREFIX,头文件安装在下$PREFIX/include,库安装在下$PREFIX/lib。如果您构建的 zlib 配置为--prefix='c:\mingw'. 相反,应该同时存在

c:\mingw\include\zlib.h
c:\mingw\lib\libz.so

或类似的东西。

要构建依赖于像这样安装的 zlib 的东西,您应该将前者CPPFLAGS作为-I包含路径,而将后者LDFLAGS作为-L库路径。

我鼓励您参考 GNU Make 手册和 GNU 编码标准,以帮助理解这些系统约定。

于 2016-06-13T01:40:02.067 回答