cmake, clarification on include_directories

cmake, clarification on include_directories

本文关键字:directories include on clarification cmake      更新时间:2023-10-16

我正在尝试使用cmake,但我是cmake和c ++的新手。我想有一段代码用于不同的其他程序。文件夹结构如下所示:

/modules/foo
/modules/foo/src
/modules/foo/include/foo
/cmake
/apps/bar
/apps/bar/src
/apps/bar/include

我的问题是在 bar main 中我可以包含(以及编译和运行(两者

#include "foo.h"
#include "foo/foo.h"

我认为这是出现问题的征兆。我正在寻找的是类似的东西

#include "foo.h" // only inside the foo source code
#include "foo/foo.h" // outside

如果我从/modules/foo/CMakeList 中删除include_directories(include/foo).txt会出现一个编译错误,指出在/modules/foo/src/foo 中找不到"foo.h"文件.cpp

如果我从 FindFoo.cmake 中删除include_directories(${CMAKE_CURRENT_LIST_DIR}/../modules/foo/include),我会在"foo/foo.h"文件中出现错误,找不到/apps/bar/src/main.cpp

我能做什么?解决此类问题的常见做法是什么?我是否必须忽略这样一个事实,即在 apps/bar/src/main.cpp我可以同时包含foo.hfoo/foo.h?我只需要写一次include_directories并在 foo.cpp 中使用#include "foo/foo.h吗?

  • 使用 foo.h 和 foo.cpp 创建一个单独的目录 foo。在 foo 中.cpp把 #include "foo.h" ,可能首先包括
  • 添加 CMakeLists.txt 文件以创建 foo 库,add_library命令。
  • 在主 CMakeList 的序言中添加include_directories(${CMAKE_SOURCE_DIR}).txt
  • 在项目的其他任何位置,您可以通过指定 #include "foo/foo.h" 来包含您的 foo.h 。无论在哪里执行此操作,都不要忘记使用 target_link_libraries 命令与foo库链接。

珍贵的环节:http://www.cmake.org/cmake/help/v2.8.11/cmake.html#section_Commands