小编Cal*_*has的帖子

使用非标准包含和库目录的 CMake 最佳实践

我一直在尝试使用 CMake 在工作的 Linux 机器上构建 Mozilla RR。我们有一个稍微古怪的安排,其中共享库存储在网络驱动器上的位置,如/sw/external/product-name/linux64_g63.dll/. 此外,我在$HOME/sw/. (我不是这个盒子上的sudoer。)

我很困惑我应该如何与 CMake 通信以查看非标准目录。到目前为止,我已经捏造了:

PKG_CONFIG_PATH=$HOME/sw/capnproto-0.6.1/lib/pkconfig \
 CC=gcc-6.3 CXX=g++-6.3 \
 cmake \ 
 -DCMAKE_INSTALL_PREFIX=$HOME/sw/rr-5.1.0 \
 -DPYTHON_EXECUTABLE=$HOME/bin/python2 \
 -DCMAKE_FIND_ROOT_PATH=$HOME/sw/libseccomp-2.2.3/ \
 ../src/
Run Code Online (Sandbox Code Playgroud)

这显然不是一个可扩展的解决方案,但它至少成功完成了配置并发出了一些 Makefile。

如果我省略-DCMAKE_FIND_ROOT_PATH=$HOME/sw/libseccomp-2.2.3/,CMake 将失败,抱怨缺少 libseccomp-2.2.3 依赖项。但是如果我确实有这个定义,它就可以工作,告诉我 CMake 了解 libseccomp-2.2.3 文件的位置,因此会正确地将路径添加到必要的编译器调用中。

但是,make没有成功,因为gcc无法从 libseccomp probject 中找到所需的头文件。检查后make VERBOSE=1,我发现 CMake 没有添加-I$HOME/sw/libseccomp-2.2.3/includegcc调用中。


我觉得这不是正确的方法。我看过的其他答案告诉我修改 CMakeLists.txt 文件,但肯定

  1. 这将无法跨多个 CMake 项目进行扩展,并且
  2. 对于每个项目,这需要我为我构建软件的每个平台(Solaris/Linux/Darwin/Cygwin)维护一个单独的 CMakeLists.txt 文件。

是否有解决此问题的规范解决方案?也许每个站点的配置文件会告诉 CMake 如何为我在该站点上构建的所有项目查找库和头文件?

cmake

0
推荐指数
1
解决办法
3297
查看次数

标签 统计

cmake ×1