c++ - g++ makefile,多个cpp,每个都有自己的main()

标签 c++ makefile

我有几个 .cpp 文件,每个文件都单独编译成自己的可执行文件,我还想在主可执行文件中使用每个文件中的函数和 .h。我该怎么做呢?

生成文件

all: A B C
  g++ -o main.exe -std=c++11 A.cpp B.cpp C.cpp

A: A.cpp
  g++ -o A.exe -std=c++11 A.cpp


B: B.cpp
  g++ -o B.exe -std=c++11 B.cpp


C: C.cpp
  g++ -o C.exe -std=c++11 C.cpp

最佳答案

一个 C 程序不能有两个同名的函数,main 在这方面并不特殊。

我的建议是将 main 函数分离到它们自己的 CPP 文件中,并在公共(public)文件中仅保留实用程序可重用函数:

all: A B C
  g++ -o main.exe -std=c++11 all_main.cpp A.cpp B.cpp C.cpp

A: A.cpp
  g++ -o A.exe -std=c++11 A_main.cpp A.cpp


B: B.cpp
  g++ -o B.exe -std=c++11 B_main.cpp B.cpp


C: C.cpp
  g++ -o C.exe -std=c++11 C_main.cpp C.cpp

另一种方法是使用条件编译来跳过不需要的 main 定义。但这会很困惑。

类似于:

A.cpp

void funA()
{ /*...*/ }

#ifdef A_EXE
int main()
{
}
#endif

然后在makefile中:

A: A.cpp
  g++ -o A.exe -std=c++11 -DA_EXE A.cpp

这种条件编译技巧的使用,虽然有点 hacky 且不太可扩展,但有时用于在库代码中提供小型测试用例或示例程序。

关于c++ - g++ makefile,多个cpp,每个都有自己的main(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769589/

相关文章:

c - Makefile 抛出 undefined reference 错误

c++ - 当我尝试编译时带有 boost 的 undefined reference

c++ - 为什么这有效? (在 C++ 中查找奇数)

c++ - 如何在 QUrl 中设置主机路径?

c++ - 互斥锁在 Linux 中没有像我希望的那样工作

c++ - 为什么 std::move 会阻止 RVO(返回值优化)?

android - 我怎样才能阻止 make 出现段错误?

c++ - 'n' boost::thread 实例执行 'm' 个作业

c - makefile 中的硬链接(hard link)

android - 什么是构建 Android 时的 export_includes 和 import_includes 文件