我正在 Ubuntu 操作系统的桌面上用 C++ 编写一个简单的练习程序。这是我的 main.cpp,其中包含 main() 方法:
#include "miscClass1.h"
#include <iostream>
using namespace std;
int main(){
miscClass1 A(3, 5);
cout << A.getX() << endl;
}
Run Code Online (Sandbox Code Playgroud)
这是我的杂项类的头文件,其中我只定义了一些简单的字段和函数(misClass1.h)
#ifndef MISCCLASS1_H
#define MISCCLASS1_H
class miscClass1 {
int X;
int Y;
public:
miscClass1(int x, int y);
int addXY();//adds the two variables x and y
int getX();
int getY();//accessors
void setX(int x);
void setY(int y);//mutators
};
#endif
Run Code Online (Sandbox Code Playgroud)
这是类的头文件的源文件(misClass1.cpp):
#include "miscClass1.h"
miscClass1::miscClass1(int x, int y)
{
X = x;
Y = y;
}
int miscClass1::addXY()
{
return (X + Y);
}
int miscClass1::getX()
{
return (X);
}
int miscClass1::getY()
{
return (Y);
}
void miscClass1::setX(int x)
{
X = x;
}
void miscClass1::setY(int y)
{
Y = y;
}
Run Code Online (Sandbox Code Playgroud)
这可行,但我必须使用命令:
$g++ main.cpp misClass1.cpp
Run Code Online (Sandbox Code Playgroud)
在编译时,如果我必须编译一个包含多个类/库的严肃程序,每个类/库都存储在自己的 .cpp 文件中,那么即使有数百或数千个,我也需要包含其中的每一个,这将是遥不可及的。如何更有效地编译我的程序,而不在编译时调用每个文件?我还想知道我在该计划中所做的其他事情是否是不好的做法。
您可能想了解make. 在最简单的情况下,您可以执行类似这样的操作,这在单个文件中完全通用Makefile:
sources := $(wildcard *.cpp)
objects := $(sources:.cpp=.o)
myapp: $(objects)
$(CXX) -o $@ $^
Run Code Online (Sandbox Code Playgroud)
它有两件事。它通过依赖目录列表来定义“源”。因此,如果您添加另一个,比如说,它会自动myclass2.cpp添加到列表中。接下来,它将“对象”定义为源中文件的转换,但将结尾替换为. 因为了解编译,这就够了(!!)。.cpp.omake
最后我们说我们想要一个myapp依赖于“对象”的构建目标(您可以给它任何名称)。声明了实际的依赖关系,因此现在make知道它需要创建对象并查看前面的两个声明以弄清楚如何创建。$@然后,它使用编译器根据右侧的依赖项(通过 )创建左侧的目标(通过 定义$^)
您可以通过添加以下内容来模拟“空运行”中的构建-n:
$ make -n
g++ -c -o main.o main.cpp
g++ -c -o misClass1.o miscClass1.cpp
g++ -o myapp main.o miscClass1.o
$
Run Code Online (Sandbox Code Playgroud)
如果你删除-n,它就会。您可以(但不必CXXFLAGS)通过等等定义选项。实际的编译器选择、C++ 语言风格等也是如此。
所以补充说,
CXXFLAGS = -Wall -pedantic -O2
Run Code Online (Sandbox Code Playgroud)
让您构建优化的二进制文件:
$ make
g++ -Wall -pedantic -O2 -c -o main.o main.cpp
g++ -Wall -pedantic -O2 -c -o miscClass1.o miscClass1.cpp
g++ -o myapp main.o miscClass1.o
$
Run Code Online (Sandbox Code Playgroud)
另一个主要好处是,您现在只需更改任何 C++ 文件,然后说它make就会处理好事情。还有更多(这里有大量已回答的问题),但这应该可以帮助您继续。
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |