我有几个.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
答案 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
定义。但那会非常混乱。
类似的东西:
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.cpp
,B.cpp
中的C.cpp
是绝对必要的,那么您可以将其置于#ifdef
下:
#ifdef STANDALONE_APP
int main(....) { ... }
#endif
然后为-DSTANDALONE_APP
,A
,B
......
C
或者更好地使用@rodrigo的建议。