CMake忽略了包含目录。

4
我有一个关于我的项目的问题。我设法让cmake编译它,但是make无法运行。我收到错误消息,指出找不到某些头文件,因此我根据这个问题的答案检查了我的include_directories:在CMake中列出include_directories 我的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
什么是“INC”标签? - m.s.
我在谷歌上搜索了如何在makefile中指定包含目录 - 我假设这应该从cmake传播到makefile(因为它应该知道在哪里查找头文件和源代码)。 - sqred
你能提供一个CMakeLists.txt文件吗?也许只是像include_directories()必须在add_library和add_executable之前调用这样的简单问题。 - Finn
一个示例的CMakeLists.txt文件会非常有帮助。同时,你也可能会发现,一些在你的头文件路径中的头文件正在引用不在你的头文件路径中的头文件。 - jluzwick
1
添加了一个示例。我真的希望这只是一些新手问题。 - sqred
显示剩余2条评论
1个回答

2
这是一个快速检查清单:
- 确保目录路径中没有空格,这可能不会直接影响CMake,但可能会影响其他工具(GCC、mingw-make/make)。 - 确保你有正确的Make命令(在调用`cmake`的目录中尝试运行`make`)。否则,你可以在环境中添加Make的路径,以确保CMake可以找到它。 - 打印目录路径以确保它们是正确的,并检查是否有空格。
``` MESSAGE("${Boost_INCLUDE_DIR}") MESSAGE("${GLEW_INCLUDE_DIR}") ... ```
- 实际上,你应该将头文件添加到可执行文件中(虽然不是必需的,但如果你生成IDE项目文件,则会在那里看到头文件)。 - 对于每个外部库,尝试编译一个简单的hello world程序,以检测该库是否已正确安装(创建一个使用简单函数的简单项目来查看是否编译、链接和运行)。 - 确保包含目录路径正确:`#include `或`#include "something.h"`或`#include

1
首先,感谢您的输入。我已经使用cmake-gui检查了我的包含目录,并且message()给出了正确的路径。但是make命令说在${MyProject_SOURCE_DIR}/include中找不到一个包含文件,尽管它在包含目录中。 - sqred
此时,您必须重现问题以便进行进一步的调查。 - CoffeDeveloper
尝试:set(CMAKE_INCLUDE_CURRENT_DIR ON) - Melroy van den Berg
在我看来,关于使用cmake目标的建议并不好。确保包配置正确可能需要一些工作,但是当在不同平台上使用多个包、维护不同版本、运行测试以及有许多外部构建变量和影响二进制文件的方式时,这将会得到回报。如果你需要目标信息,你可以直接查看目标的属性来查看缓存的内容。 - StarShine

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