cmake,对include_directories的澄清

时间:2013-10-09 16:01:39

标签: c++ cmake

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

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

我的问题是,在酒吧主要我可以包括(和编译并运行)两个

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

我认为这是出现问题的症状。 我正在寻找的是像

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

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

如果从/modules/foo/CMakeLists.txt中删除include_directories(include/foo),我会收到一个编译错误,指出/ modules / foo / src /中未找到'foo.h'文件 Foo.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

1 个答案:

答案 0 :(得分:1)

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

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