【问题标题】:CMake can not find include filesCMake 找不到包含文件
【发布时间】:2013-03-05 04:52:28
【问题描述】:

我有一个布局如下的项目:

   /build
   /source
        +--- CMakeLists.txt
        |
        +--- /bin
        |      +--CMakefiles.txt
        |      +--main.cpp
        |
        +--- /jsoncpp
        |       +--- /json
        |       |       +--json.h
        |       |       +--json-forwards.h
        |       |
        |       +--jsoncpp.cpp
        |       +--CMakeLists.txt
        |
        +--- /jsonreader
                 +-- jsonreader.cpp
                 +-- jsonreader.h
                 +-- CMakeLists.txt

在 /source/CMakeLists.txt 我有这行代码;

include_directories(jsoncpp jsonreader)

但是在构建目录中运行 'cmake -G "MSYS Makefiles" ../source' 会生成 Makefile,然后运行 ​​'make' 会生成以下错误:

Scanning dependencies of target updater
[ 33%] Building CXX object bin/CMakeFiles/updater.dir/main.cpp.obj
In file included from k:/own-projects/updater-Project/withJsonCpp/source/bin/main.cpp:2:0:
../source/jsonreader/jsonreader.h:2:18: fatal error: json.h: No such file
or directory
compilation terminated.
make[2]: *** [bin/CMakeFiles/updater.dir/main.cpp.obj] Error 1
make[1]: *** [bin/CMakeFiles/updater.dir/all] Error 2
make: *** [all] Error 2

我做错了什么,我该如何解决?

【问题讨论】:

  • 您不应该将 jsoncpp/json 添加到您的包含中。还是在您的 C++ 文件中使用相对路径?
  • @drescherjm:在我的 C++ 中,我确实只使用“include”header.h“而不管标头的位置是错误的吗?添加 jsoncpp/json 不起作用。
  • 我相信您想在包含路径前加上 ${CMAKE_SOURCE_DIR}
  • @drescherjm:这与您的第一条评论一起使用。如果您不介意,请将其全部作为正确答案,谢谢。

标签: c++ makefile cmake


【解决方案1】:

有两个问题。首先,您必须将jsoncpp/json 路径添加到您包含的目录中。然而,这样做会产生第二个问题。由于您的可执行文件不在源文件夹中,您需要在路径前添加 ${CMAKE_SOURCE_DIR} 前缀,因此 include_directories() 如下所示:

include_directories("${CMAKE_SOURCE_DIR}/jsoncpp"
    "${CMAKE_SOURCE_DIR}/jsoncpp/json"
    "${CMAKE_SOURCE_DIR}/jsonreader")

我只是出于习惯添加了引号。我大部分时间都用我的CMakeLists.txt 这样做,所以路径中的空格没有问题。

【讨论】:

  • 我通过 ROS 项目找到了这个答案。对于潜在的未来访客,我需要include_directories(include)
  • 我使用的是 CMAKE_CURRENT_SOURCE_DIR 而不是 CMAKE_SOURCE_DIR 这是我的错误。
【解决方案2】:

阿曼尼,

似乎您包含“json.h”而没有其相对路径。您可以像这样包含它:

#include "json/json.h"

或者,在您的 CMakeLists.txt 文件中,将 json 目录添加到包含目录:

include_directories(jsoncpp jsoncpp/json jsonreader)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2019-09-08
    • 1970-01-01
    • 2017-05-17
    相关资源
    最近更新 更多