如何使用CMake在不同的目录中包含软件包?

3
我正在尝试在CentOS服务器上编译一段C++代码。我需要包含一个安装在“/services/tools”位置的库(NLopt)。我已经尝试使用“module load NLopt”,但是CMake仍然找不到该库。
我需要怎么做才能让CMake找到这个库呢?

1
看起来你想要与这个问题类似的东西。它的答案也适用于你:将CMAKE_PREFIX_PATH CMake变量设置为/services/tools - Tsyvarev
2个回答

2

"默认情况下,[it]会将NLopt静态库(libnlopt.a)安装在/usr/local/lib中,将NLopt头文件(nlopt.h)安装在/usr/local/include中,并安装手册页和其他一些文件。"

因此,您可以将该头文件包含为

include_directories("/usr/local/include")

并将库链接为

target_link_libraries(project "/usr/local/lib/lbnlopt.a")

理想情况下,您可以尝试为该库查找一个CMake查找模块。

谢谢回答。问题是它没有安装在默认目录下,而是在/services/tools/目录下。我有一个用于CMake查找模块的文件,但由于安装的目录,它无法定位库。如果可能的话,我希望以更清晰的方式处理路径,尽管像您建议的那样引用该路径也可以。我的大部分困惑可能是因为我不知道这是操作系统还是CMake的问题。 - Christian Ravn
非常抱歉,我忽略了您提到它在不同的位置。您的查找模块是否检查“/services/tools”下面?这不是标准位置,因此可能不会检查。如果确实没有,您可以修改它以在该位置查找。但是,这比只是在CMakeLists中引用路径要不太干净。 - Ramon
查找模块通常不会对您的系统进行广泛搜索,它们只会在一些预期库存在的位置进行查找,例如/usr/local/include/usr/local/libusr/includeusr/lib等。 - Ramon

0
假设你的库在 /service/tools/lib 中,头文件在 /service/tools/include 中,你也可以设置 CMAKE_PREFIX_PATH,像这样:
list(APPEND CMAKE_PREFIX_PATH /service/tools)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接