使用 g++ 编译时列出所有 cpp/cc 文件是否正常?
Is normal to list all the cpp/cc files when compiling with g++?
我在GTKMM教程中做"Hello World","app"使用三个文件,main.cc
,helloworld.h
和helloworld.cc
。
一开始我以为编译 main.cc:
g++ -o HW main.cc $(pkg-config ... )
就足够了,但给出了错误(未定义对Helloworld::Helloworld
的引用(等。
换句话说,它编译主类和标头,但不编译HW
类,这是有道理的,因为标头包含在 Main 中,而不是Helloworld.cc
中。问题是我有点害怕包括它,因为我在其他问题中读到"包括所有内容是一种不好的做法"。
话虽如此,当我使用同一命令中的所有文件进行编译时:
g++ -o HW main.cc helloworld.cc $(pkg-config ... )
"应用程序"工作没有错误。
那么,既然使用最后一个命令有效,那么以这种方式编译是一种好的做法吗?
如果我的应用使用大量类会怎样?
我必须在命令中手动将它们全部写下来吗?
如果没有,我必须使用#include
吗?
对所有cc 使用的文件使用 #include 是否是一种好习惯?
使用 g++ 编译时列出所有 cpp/cc 文件正常吗?
是的,完全。
否则它怎么知道你想编译什么源代码?
问题是我有点害怕包括它,因为我在其他问题中读到包括所有内容是一种不好的做法。
#include
多余的标头是一种不好的做法。
将完整的源代码传递给编译器则不是。
对所有 cc 使用的文件使用 #include 是否是一种好习惯?
绝对不行。
如果我的应用使用大量类会怎样?我必须在命令中手动将它们全部写下来吗?
不。您应该使用为您处理此问题的构建系统。这可能是一个IDE,它获取项目中的所有文件并依次将它们传递给编译器,或者它可以是一个带有*.cpp
通配符的CMakeLists.txt
/Makefile
(尽管我实际上建议明确地列出源文件,一个接一个;这并不难(。
在命令行上手动调用g++
对于快速测试来说很好,但对于实际使用,您不想在这样的机器上小丑。
是对所有 cc 使用的文件使用 #include 的好习惯
这不仅是不好的做法,永远不要这样做。
为了创建可执行文件,您实际上必须做两件事:
将所有源代码文件编译为目标文件或库。
将所有目标文件和所需的库链接到可执行文件中。
您似乎忽略了链接阶段是解析或链接单独源文件中定义的符号的要点。
我必须在命令中手动将它们全部写下来吗?
要使编译器了解标头中声明的符号的定义,必须包含所有源文件。此规则的例外情况可以是(但不限于(包含模板元编程 (TMP( 代码的标头,这些代码通常完全存在于头文件中。
如果我的应用使用大量类会怎样?
大多数大型C++项目都利用构建配置工具(如 CMAKE(来处理生成文件。
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 使用 g++ 编译时列出所有 cpp/cc 文件是否正常?
- 在头文件和 .cc 文件之间建立关系
- 如何在makefile中添加.c,.cc和.so文件以创建另一个.so
- 如何访问其他 .cc 文件中命名空间中定义的函数
- 如果需要测试,则C 将常数变量放在CC文件中
- 连接两个C 文件(list.cc and queue.cc)困难
- main.cc:5:30:致命错误:文件夹/file.h:没有这样的文件或目录
- 我如何确保修改.H文件时,使用Visual Studio 2008将包括其在内的.cc文件自动编译
- 我可以在生成文件中为 CC、CFLAGS 使用其他名称,或者将它们硬连接到 GNU make 中
- 如何在 Omnet++ INET 的示例中找到实现 .cc 文件
- .h文件应该是与外部函数的接口;如何在包含标头的.cc文件中进行定义
- 我可以在客户端使用 .cc 原型文件并在服务器端使用 .java proto 文件吗?
- 类成员C++标头和 .cc 文件问题
- 在头文件中声明要由 .cc 文件访问和填充的结构
- .cc和.cpp文件后缀有什么区别
- dsr/linkcache.cc:致命错误:list.h:没有这样的文件或目录
- 当项目导入到eclipse中时,.cpp文件被转换为.cc文件
- 把控制发回主站.Cc文件在我的c++项目从另一个源文件