c++ - 用于将多个.cpp 和.h 编译成一个lib 的Makefile

标签 c++ makefile g++ cygwin compilation

我在 Cygwin 下运行带有 gcc/g++ 的 Windows 7。将一组 .cpp(C++ 源代码)和 .h(头文件)文件编译成静态库 (.dll) 的 Makefile 格式(和扩展名,我认为是 .mk?)是什么?假设我有一组可变文件:

  • 文件1.cpp
  • 文件1.h

  • 文件2.cpp

  • 文件2.h

  • file3.cpp

  • file3.h

  • ....

将这些编译成静态库的 makefile 格式(和扩展名)是什么? (我对 makefile 很陌生)最快的方法是什么?

最佳答案

扩展名根本没有,如果您希望 GNU Make 自动找到该文件,则该文件称为 Makefile(或 makefile)。

至少,GNU Make 允许您依赖某些自动变量,这些变量本身就可以让您以 C/C++ 文件作为输入来控制大部分构建过程。这些变量包括CCCPPCFLAGSCPPFLAGSCXXCXXFLAGSLDFLAGS。它们控制 make 将使用的 C/C++ 预处理器、编译器和链接器(最终组装程序的程序)的开关。

GNU Make 还包含许多隐式规则,旨在使其能够从 C/C++ 源代码自动构建程序,因此您不必 [总是] 编写自己的规则。

例如,即使没有 makefile,如果您尝试运行make foobar,GNU Make 也会尝试首先构建foobar.ofoobar.cfoobar.cpp 如果找到,通过调用适当的编译器,然后将尝试通过汇编构建 foobar (包括. 链接) 它来自系统库和 foobar.o 的部分。简而言之,即使没有生成文件,GNU Make 也知道如何构建 foobar 程序——这要归功于隐式规则。您可以通过使用 -p 开关调用 make 来查看这些规则。

有些人喜欢依靠 GNU Make 的隐式规则数据库来获得精简和简短的 makefile,其中只指定了他们项目的特定内容,而有些人可能会禁用整个隐式规则数据库(使用 -r 开关)并通过在其 makefile 中指定所有内容来完全控制构建过程。我不会评论这两种策略的优越性,请放心,这两种策略都在一定程度上起作用。

关于c++ - 用于将多个.cpp 和.h 编译成一个lib 的Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3092740/

相关文章:

c++ - "undefined reference to"使用'g++'编译C++程序

c++ - std::fill 的 Clang 静态参数导致链接器失败

c++ - 你能给我一个内存泄漏的真实工作示例吗?

c++ - 'round' 不是 'std' 的成员

c++ - eclipse 中的 lapack undefined reference

iphone - 如何使用makefile编译iphone代码?

c++ - DistCC 和 CMake - 在运行 make 时在本地和分布式构建之间进行选择

c++ - 用作值的共享指针 - 赋值期间出错

ubuntu - 尝试从全新安装运行 CUDA 示例只会打印 "make: Nothing to be done for ` all'"

shell - 在 make 变量中的命令上执行 shell 函数