gpt4 book ai didi

c++ - 无法使用来自不同目录中不同源文件的 Makefile 进行编译

转载 作者:行者123 更新时间:2023-11-28 03:37:55 27 4
gpt4 key购买 nike

我有一个具有以下目录结构的 C++ 项目:

src
├── database
│   ├── database.hpp
│   ├── leveldb.cpp
│   └── leveldb.hpp
├── Makefile
└── server.cpp

server.cpp 包括“database/database.hpp”和“database/leveldb.hpp”。leveldb.cpp 包括“leveldb.hpp”

到目前为止,我的 Makefile 是这样的(请记住,$LEVELDB 是 Google 的 leveldb 库的路径,不同于我的 leveldb.hpp 和 cpp 文件,它们代表一个自定义类):

CC=g++
LEVELDB=/route/to/Googles/library/leveldb
BOOST=/route/to/boost/cpp-netlib-0.9.2

DATABASE=/route/to/my/project/src/database

CFLAGS=-I$(LEVELDB)/include -I$(BOOST) -Wall -O2
LDFLAGS=-L$(LEVELDB) -lleveldb -lpthread -lboost_system -lboost_thread -pthread

all:server

server: server.cpp database/leveldb.cpp
$(CC) -o $@ $(CFLAGS) -I$(DATABASE) $< $(LDFLAGS) -L$(DATABASE)

我无法让它编译。它给了我一个错误“对 `LevelDB::LevelDB(std::basic_string, std::allocator >)' 的 undefined reference ”,我知道这是一个编译错误,因为 Makefile,因为当我把它全部放入时一切正常一个源文件。

非常感谢您的帮助。

谢谢:)

最佳答案

您还没有告诉我们您是否正在尝试 make (或 make allmake server )或 make servidor .无论哪种方式,问题是您没有链接 leveldb定义到您的目标中。

在这条规则中:

servidor: server.cpp database/leveldb.cpp
$(CC) -o $@ $(CFLAGS) -I$(DATABASE) $< $(LDFLAGS) -L$(DATABASE)

您正在使用自动变量 $< ,这意味着第一个先决条件,( server.cpp )。你应该使用 $^ ,这意味着所有先决条件(server.cpp database/leveldb.cpp)。

如果你makemake allmake server , Make 将尝试构建 server来自 server.cpp使用未提及 leveldb.cpp 的默认规则.您确定不希望规则为“all:servidor”吗?

关于c++ - 无法使用来自不同目录中不同源文件的 Makefile 进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com