0

我正在尝试使用 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

如果我include_directories(include/foo)从 /modules/foo/CMakeLists.txt 中删除,我会收到一个编译错误,提示在 /modules/foo/src/foo.cpp 中找不到“foo.h”文件

如果我include_directories(${CMAKE_CURRENT_LIST_DIR}/../modules/foo/include)从 FindFoo.cmake 中删除,我会在'foo/foo.h' file not found /apps/bar/src/main.cpp中得到错误

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

4

1 回答 1

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

珍贵链接:http ://www.cmake.org/cmake/help/v2.8.11/cmake.html#section_Commands

于 2013-10-10T13:36:59.467 回答