C++ - 编译并 link 多个文件
C++ - Compile and link multiple files
我有一个结构如下的项目:
Item.cpp
Item.h
main.cpp
Makefile
以下源代码在 Item.h
文件中:
class Item {
public:
Item();
~Item();
};
以下源代码在 Item.cpp
文件中:
#include <iostream>
#include "Item.h"
Item::Item() {
std::cout << "Item created..." << std::endl;
}
Item::~Item() {
std::cout << "Item destroyed..." << std::endl;
}
以下源代码是main.cpp
文件的内容:
#include "Item.h"
#include <iostream>
int main() {
std::cout << "Initialize program..." << std::endl;
Item item_1();
std::cout << "Hello world!" << std::endl;
return 0;
}
最后,下面的源代码是Makefile
文件:
CXX = g++
all: main item
$(CXX) -o sales.o main.o Item.o
main:
$(CXX) -c main.cpp
item:
$(CXX) -c Item.cpp
clean:
rm -rf *.o
当我 运行 make
命令然后我 运行 使用命令 ./sales.o
编译的代码时,我得到以下输出:
Initialize program...
Hello world!
为什么 class Item
的构造方法的输出没有打印在控制台中?我在某些网页上发现您可以分步编译源代码,然后在使用 g++
时可以使用 -o
选项 link 它,但在这种情况下不起作用。我怎样才能一步一步地编译这个源代码,然后 link 它在 Makefile
?
我确定你忽略了这个警告:
warning: empty parentheses were disambiguated as a function declaration [-Wvexing-parse]
#include "Item.h"
#include <iostream>
int main() {
std::cout << "Initialize program..." << std::endl;
Item item_1;
std::cout << "Hello world!" << std::endl;
return 0;
}
只需删除括号即可
测试:https://godbolt.org/z/KrdrhvsrW
我有一个结构如下的项目:
Item.cpp
Item.h
main.cpp
Makefile
以下源代码在 Item.h
文件中:
class Item {
public:
Item();
~Item();
};
以下源代码在 Item.cpp
文件中:
#include <iostream>
#include "Item.h"
Item::Item() {
std::cout << "Item created..." << std::endl;
}
Item::~Item() {
std::cout << "Item destroyed..." << std::endl;
}
以下源代码是main.cpp
文件的内容:
#include "Item.h"
#include <iostream>
int main() {
std::cout << "Initialize program..." << std::endl;
Item item_1();
std::cout << "Hello world!" << std::endl;
return 0;
}
最后,下面的源代码是Makefile
文件:
CXX = g++
all: main item
$(CXX) -o sales.o main.o Item.o
main:
$(CXX) -c main.cpp
item:
$(CXX) -c Item.cpp
clean:
rm -rf *.o
当我 运行 make
命令然后我 运行 使用命令 ./sales.o
编译的代码时,我得到以下输出:
Initialize program...
Hello world!
为什么 class Item
的构造方法的输出没有打印在控制台中?我在某些网页上发现您可以分步编译源代码,然后在使用 g++
时可以使用 -o
选项 link 它,但在这种情况下不起作用。我怎样才能一步一步地编译这个源代码,然后 link 它在 Makefile
?
我确定你忽略了这个警告:
warning: empty parentheses were disambiguated as a function declaration [-Wvexing-parse]
#include "Item.h"
#include <iostream>
int main() {
std::cout << "Initialize program..." << std::endl;
Item item_1;
std::cout << "Hello world!" << std::endl;
return 0;
}
只需删除括号即可 测试:https://godbolt.org/z/KrdrhvsrW