【问题标题】:CMake is ignoring include directoriesCMake 忽略包含目录
【发布时间】:2015-07-31 08:02:42
【问题描述】:

我的项目还有另一个问题。我设法让 cmake 编译它,但 make 不会运行。我收到错误消息,找不到某些标头,所以我根据这个问题的答案检查了我的 include_directories:Listing include_directories in CMake

我的 include_directories 列出了我想要的所有指定文件夹,但 makefile 既不包含“INC”标签,cmake-gui 也不显示 include_directories 属性。有没有人遇到过类似或类似的问题可以帮助我?

编辑:

顶级cmake:

PROJECT(MyProject) 
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0)
# set the compiler flags
SET(CMAKE_CXX_COMPILER g++)
SET(CMAKE_CXX_FLAGS "-fPIC -g -D DEBUG -Wall -Wfatal-errors -fstrict-aliasing")

INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR}
                    ${GLEW_INCLUDE_DIR}
                    ${GLUT_INCLUDE_DIR}
                    ${GSL_INCLUDE_DIRS}                 
                    ${OpenCV_INCLUDE_DIRS} 
                    ${QT_INCLUDE_DIR}           
                    ${MyProject_SOURCE_DIR}/include)

然后我有一些 add_subdirectories。 CMake 运行没有错误,但 make 似乎忽略了最后的 include_directories 行。

【问题讨论】:

  • 什么是“INC”标签?
  • 我在 Google 上搜索了如何在 makefile 中指定包含目录 - 我认为这应该从 cmake 传播到 makefile(因为它应该知道在哪里查找标头和源)
  • 你能提供一个 CMakeLists.txt 吗?也许这是一些简单的东西,比如 include_directories() 必须在 add_library 和 add_executable 之前调用。
  • 一个示例 CMakeLists.txt 文件将非常有帮助。您还可能会看到包含路径中的某些标头正在引用不在您的包含路径中的标头。
  • 添加了一个示例。我真的希望这是一些菜鸟问题

标签: cmake


【解决方案1】:

这是一个快速清单:

  • 确保目录路径没有空格,它可能不会直接影响 CMake,但可能会导致其他工具(GCC、mingw-make/make)出现问题
  • 确保您有正确的 Make 命令(尝试在您调用 cmake 的目录中运行 make)。否则,您可以简单地在环境中添加一个 Make 路径,这样您就可以确保 cmake 看到它。
  • 打印目录路径以确保它们正确并检查它们是否有空格

    MESSAGE("${Boost_INCLUDE_DIR}")

    MESSAGE("${GLEW_INCLUDE_DIR}")

    ...

  • 您实际上应该将头文件添加到可执行文件(不需要,但如果您生成 IDE 项目文件,您会在其中看到头文件)

  • 对于使用的每个外部库,尝试编译一个简单的 hello world 以检测该库是否已正确安装(使用简单的函数创建一个简单的项目以查看是否编译、链接和运行)
  • 确保包含目录路径正确#include <something.h>#include "something.h"#include <path/something.h>(或更改CMake以错误方式设置的包含路径)
  • 您是否安装了那些外部库,不是吗? (如果您只是在某个地方“解压缩”它们,CMake 将无法找到它们)

CMake 包被认为是我唯一讨厌 CMake 的地方。(我为每个外部库手动设置了 1 个 CMake 项目,然后从我的项目中手动链接它,而不是使用“全局变量”)。大多数情况下,它依赖于这些库的某种安装过程,但它可能会以您无法预测的许多方式被更改或出错,而如果您下载外部库的特定修订版,请自行构建并设置路径手动您确定如果出现问题是库维护者的错,而不是您的错或缺少安装信息(如果出现错误,则意味着您不再使用正常工作的操作系统:D)

【讨论】:

  • 首先,感谢您的意见。我已经用 cmake-gui 检查了我的包含目录,并且 message() 给了我正确的路径。 make 表示未找到来自 ${MyProject_SOURCE_DIR}/include 的包含,尽管它在包含目录中。
  • 此时您必须重现问题以便进一步调查
  • 试试:set (CMAKE_INCLUDE_CURRENT_DIR ON)
猜你喜欢
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多