【问题标题】:C++: Including an external library in MakefileC++:在 Makefile 中包含一个外部库
【发布时间】:2020-06-22 13:24:48
【问题描述】:

所以,我在 C++ 程序中包含 ncurses 库时遇到了一些麻烦。 似乎我的 Makefile 设置不正确,并且找不到库函数。 我使用“sudo apt-get install libncurses5-dev libncursesw5-dev”安装了库,并且可以通过“g++ -o output src/main.cpp -lncurses”手动编译我的代码。

Makefile 中的编译器设置如下所示:

CC = g++
CXXFLAGS = -std=c++11 -Wall`
LDFLAGS =
LDLIBS = -lncurses 

我在 ubuntu 上的 Visual Studios Code 中使用“C/C++ Makefile Project”插件。

【问题讨论】:

  • 除非您告诉我们问题所在,否则我们无法帮助您。 我有一些麻烦不是我们可以解决的问题。
  • 嘿,lib-include 没有工作,所以我得到了一个“未定义的引用”-错误​​到 `initscr' 和其他 curses-functions。它现在可以使用 LDFLAGS = -lncurses。

标签: makefile g++ ldflags


【解决方案1】:

编辑:正如 MadScientist 解释的那样,第二个选项遵循惯例。

所以,我找到了两种解决方案,但我不确定哪一种或其中任何一种是理想的解决方案:

  1. 设置 LDFLAGS = -lncurses

  2. 将 $(LDLIBS) 添加到 Makefile 中的一行:

# Builds the app
$(APPNAME): $(OBJ)
   $(CC) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)

【讨论】:

  • 你可以随心所欲。然而,如果你想遵循conventionLDFLAGS 应该用于链接器选项,例如-L,而LDLIBS 用于库,例如-lncurses。这是因为为了使链接正常工作,库必须始终在链接行最后出现,而链接器选项通常会更早出现。
  • 请注意make 变量如LDLIBS 没有神奇的属性。它们仅按照它们出现的规则的规定使用。有些有点特别,因为它们出现在 make 的一个或多个隐式规则中,但只要您有一个适用于构建所需目标的 显式 规则,那就无关紧要了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
相关资源
最近更新 更多