【问题标题】:added subdirectory to CMakeLists.txt isn't detected by main.cppmain.cpp 未检测到添加到 CMakeLists.txt 的子目录
【发布时间】:2021-01-19 11:15:09
【问题描述】:

我正在使用 Pybind11 创建与 c++ 代码的 python 绑定。 我的项目架构如下:

-- MyProject
   | -- lib
         | -- pybind11
              | -- CMakeLists.txt
              | -- include
         | -- myCPPCode
              | -- CMakeLists.txt
              | -- MyCodeDefinitions.h
              | -- MyCode.cpp
   | -- src
         | -- MyProject
              | -- MyModule.cpp
   | -- CMakeLists.txt
   | -- setup.py

我想做的是将#include <myCPPCode/MyCodeDefinitions.h>包含到MyModule.cpp中。

为了做到这一点,我在全局 CMakeLists.txt 中添加了以下命令:add_subdirectory(lib/myCPPCode),但它不起作用,因为我不知道在 lib/myCPPCode/CMakeLists.txt 中添加什么,我得到了以下错误:

path/MyProject/src/MyProject/MyModule.cpp:2:10: fatal error: myCPPCode/MyCodeDefinitions.h: No such file or directory
    2 | #include <myCPPCode/MyCodeDefinitions.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~

lib/myCPPCode/CMakeLists.txt的内容如下:

cmake_minimum_required(VERSION 3.13)
project(myCPPCode)


add_library(myCPPCode MyCode.cpp)

我应该如何配置我的CMakeLists.txt 和lib/myCPPCode/CMakeLists.txt?

提前谢谢你!

【问题讨论】:

  • 你永远不应该 #include .cpp 文件。是错字吗?
  • 嗨@super 不,不是错字。如果我想使用另一个文件中定义的函数,我应该怎么做?
  • 您创建了一个.hpp 文件,其中包含声明。然后将定义放入.cpp 文件中。 .cpp 文件被编译,通常作为它自己的翻译单元,当一些其他代码需要使用这些函数时,它只包含来自 .hpp 的声明,并且它们在链接过程中结合在一起。
  • @super 我明白了,谢谢你的评论,我会这样做的
  • @super 我用你的建议更新了问题!

标签: c++ python-3.x cmake pybind11 cmakelists-options


【解决方案1】:

add_subdirectory 只是告诉 cmake 在作为参数给出的目录中找到 CMakeLists.txt。

您需要将您的add_subdirectory(lib/myCPPCode) 更改为include_directories(lib/myCPPCode),它应该会更好。

【讨论】:

  • 嗨@sylvain 我尝试了你的解决方案,但没有成功,我仍然遇到同样的错误,我应该更改其他内容吗?
  • 如果你想包含&lt;myCPPCode/MyCodeDefinitions.h&gt;,你应该写include_directories(lib)或者写include_directories(lib/myCPPCode)并包含&lt;MyCodeDefinitions.h&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2018-05-28
相关资源
最近更新 更多