CMake 查找具有不同版本的多个包的特定包(NCurses)

CMake find specific package of multiple packages with different versions (NCurses)

我目前有一个 CMake 文件,用于查找一个库 (NCurses) 并将其链接到另一个库

...
set(CURSES_NEED_NCURSES TRUE)
find_package(Curses REQUIRED)
include_directories(${CURSES_INCLUDE_DIR})

add_library(myLibrary STATIC ${sources})
target_link_libraries(myLibrary ${CURSES_LIBRARIES})
target_compile_options(myLibrary PUBLIC -std=c++20 -Wall -Wconversion)
...

这工作正常,但不幸的是,它启动的版本与我需要的不同(5.7 而不是 6.1)

#include <ncurses.h>
#include <iostream>

int main()
{
    std::cout << "VERSION: " << NCURSES_VERSION;
}

输出:VERSION: 5.7

我确实在以下位置安装了所需的软件包:/usr/local/ncurses/6_1。 但是日志似乎说它是从不同的位置提取它的:Found Curses: /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk/usr/lib/libncurses.tbd

如何指定我想使用其中的哪些?

好的,我已经弄清楚了,对于可能遇到这个问题的任何其他人。

首先我从这里安装了最新版本的 ncurses (6.3):https://invisible-island.net/ncurses/#downloads-h2 (我下载了 gzipped tar)

然后我检查并删除了我能找到的 usr/local 中所有对 ncurses 的引用。

然后我提取了 tar,并进入了新目录。

我 运行 只是目录中的普通 ./configure(没有标志)。

完成后,我运行make

然后我 运行 make install,删除符号链接以停止冲突后,make install 能够 运行 正确。

确保 CMake 变量 CURSES_NEED_NCURSES 在找到包之前设置为 TRUE:

set(CURSES_NEED_NCURSES TRUE)
find_package(Curses REQUIRED)

它会完美运行:)