我've got another problem with my project. I managed to get cmake to compile it, but make won' t . 我收到错误消息,找不到一些 Headers ,所以我根据这个问题答案检查了我的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行 .
1 回答
这是一个快速清单:
确保目录路径没有空格,它可能不会直接影响CMake但它可能会导致其他工具出现问题(GCC,mingw-make / make)
确保您具有正确的Make命令(尝试在您调用
cmake
的目录中运行make
) . 否则,您只需在环境中添加Make的路径,这样您就可以确定cmake可以看到它 .打印目录路径以确保它们是正确的并检查它们是否有空格
MESSAGE("${Boost_INCLUDE_DIR}")
MESSAGE("${GLEW_INCLUDE_DIR}")
...
您实际应该将标头添加到可执行文件中(不需要,但如果您生成IDE项目文件,您将看到 Headers )
对于使用的每个外部库,尝试编译一个简单的hello world来检测是否正确安装了该库(使用简单函数创建一个简单的项目,看看是否编译,链接和运行)
确保包含目录路径正确
#include <something.h>
或#include "something.h"
或#include <path/something.h>
(或更改包含CMake以错误方式设置的路径)你安装了那些外部库吗,不是吗? (如果你只是"unzipped"某处,CMake无法找到它们)
The way CMake packages are thought is the only thing I hate about CMake. (我为每个外部库手动设置1个CMake项目,然后从我的项目中手动链接,而不是使用"Global Variables") . 大多数情况下它依赖于这些库的某种安装过程,但它可能会以多种方式被修改或出错,而您无法预测,如果您下载外部库的特定版本,请自行构建并设置路径手动你确定如果出现问题是库维护者的错误而不是你的错误或一些丢失的安装信息(如果出现问题则意味着你不再使用正在运行的操作系统:D)