【发布时间】:2013-10-09 16:01:39
【问题描述】:
我正在尝试使用 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/CMakeLists.txt 中删除 include_directories(include/foo),我会收到一个编译错误,提示在 /modules/foo/src/foo 中找不到 'foo.h' 文件。 cpp
如果我从 FindFoo.cmake 中删除 include_directories(${CMAKE_CURRENT_LIST_DIR}/../modules/foo/include) 我会在 'foo/foo.h' file not found /apps/bar/src/main.cpp
我能做什么?解决此类问题的常见做法是什么?我是否必须忽略这样一个事实,即在 apps/bar/src/main.cpp 中我可以同时包含 foo.h 和 foo/foo.h?我是否必须只写一次include_directories 并在 foo.cpp 中也使用#include "foo/foo.h?
【问题讨论】:
-
IMO 在使用 src 和 include 目录时,src 应该包含源文件 (.cpp),而 include 应该包含头文件 (.h),其中头文件通常具有子目录结构。为什么在源文件夹 (/modules/foo/src/foo.h) 中有 foo.h?分离标头和源代码的优点是能够仅发送标头(即包含目录)以用于其他项目。
-
抱歉错误。我还没有习惯考虑这些结构,我很困惑照顾那些不同的包含、来源、cmakelists 等
-
这实际上是关于您如何构建项目的个人偏好。如果您愿意,您的源代码和标题可以在同一个目录中,主要优点是如上所述的分离。