cpplint.py & cmake: 如何指定包含文件

cpplint.py & cmake: how to specify include files

假设我有一个目录结构如下的项目:

myproject
├── .git [...]
├── CMakeLists.txt
└── src
    ├── CMakeLists.txt
    ├── foo.cc
    └── foo.h

如果在 src/foo.cc 中包含像 #include "foo.h" 这样的头文件,然后 运行 Google 的 cpplint.py,它会抱怨

src/foo.cc:8:  Include the directory when naming .h files  [build/include] [4]

所以我将其包含为 #include "./foo.h"。现在又收到一个投诉:

src/foo.cc:8:  src/foo.cc should include its header file src/foo.h  [build/include] [5]

但是,如果我将它包含为 #include "src/foo.h",编译器将找不到它,因为我当前的 CMake 设置。这就是我的两个 CMakeLists.txt 文件的样子:

CMakeLists.txt:

project(myproject)
add_subdirectory(src)

src/CMakeLists.txt:

set(SRCS foo.cc)
add_executable(foo ${SRCS})

我使用 CMake 的方式有什么根本上的错误吗?我是否应该完全删除 src/CMakeLists.txt 文件,并在基础 CMakeLists.txt 中指定所有源文件及其完整路径?

或者我应该忽略 cpplint 的抱怨,因为它们并不真正适合 CMake 项目的设置方式?

在您的顶层 CMakeLists.txt 添加 include_directories(${CMAKE_SOURCE_DIR}),就像 Wander 建议的那样:

project(myproject)
include_directories(${CMAKE_SOURCE_DIR})
add_subdirectory(src)