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