我正在GTKMM教程中做“ Hello World”,“ app”使用三个文件,即main.cc
,helloworld.h
和helloworld.cc
。
起初我以为是编译main.cc的:
g++ -o HW main.cc $(pkg-config ... )
就足够了,但是会给出错误(未定义对Helloworld :: Helloworld的引用),等等。
换句话说,它编译main和header,但不编译HW
类,这是有道理的,因为header包含在Main中,但不包括Helloworld.cc
。事情是我有点害怕包含它,因为我在另一个问题中读到including everything was a bad practice
。
话虽如此,当我在同一命令中使用所有文件进行编译时:
g++ -o HW main.cc helloworld.cc $(pkg-config ... )
“应用程序”正常运行,没有错误。
因此,由于使用最后一个命令有效,因此以这种方式进行编译是一种好习惯吗?
如果我的应用程序使用大量的类会怎样?
我必须手动将它们全部写下来吗?
如果没有,我必须使用#include
吗?
对所有抄送使用的文件使用#include是一种好习惯吗?
是对所有抄送使用的文件使用#include的良好做法
不仅是不好的做法,从不这样做。
为了创建可执行文件,您实际上必须做两件事:
将所有源代码文件编译为目标文件或库。
将所有目标文件和所需的库链接到可执行文件中。
您似乎不知道链接阶段是解析或链接在单独的源文件中定义的符号的地方。