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

时间:2015-11-18 00:16:37

标签: 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

2 个答案:

答案 0 :(得分:2)

C程序不能有两个具有相同名称的函数,main并不特别。

我的建议是将main函数分离到自己的CPP文件中,只将实用程序可重用函数保留在公共文件中:

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且不易扩展,但有时会在库的代码中提供一个小的测试用例或示例程序。

答案 1 :(得分:1)

好吧,如果main()A.cppB.cpp中的C.cpp是绝对必要的,那么您可以将其置于#ifdef下:

#ifdef STANDALONE_APP
int main(....) { ... }
#endif

然后为-DSTANDALONE_APPAB ......

中的每一个传递C

或者更好地使用@rodrigo的建议。