c++ - 如果 include_directories 中的路径之一不存在,为什么 CMakeLists 不抛出警告/错误(在编译期间)?

标签 c++ visual-studio cmake

在我的 CMakeLists.txt 中,我在 include_directories() 下有很多路径。我希望在遇到不存在的路径时看到错误或警告。这样我就可以清理我的 CMakeLists.txt。我想清理多个 CMakeLists.txt。我的 include_directories 看起来像这样:

include_directories(
  "inc"
  "../../../../../../a/b/c/d/e/f/inc"
  "../../../../../../a/b/c/d/l/p/inc"
  "../../../../../../a/b/c/d/l/o/inc"
  .
  .
  .
  .
  .
  .
  .
  .

 )

CMakeLists.txt 的当前分支中不存在路径“inc”,但不会引发错误。

我认为 CMakeLists.txt 会忽略 include_directories() 中的空字符串。

最佳答案

CMake passes 包括进一步构建系统的目录,并且不太关心它们的存在。

但是,您可以使用一些代码自行完成。函数include_directories将列表放入变量 INCLUDE_DIRECTORIES你可以迭代:

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
FOREACH(dir ${dirs})
  IF(NOT EXISTS ${dir})
     message(SEND_ERROR "directory '" ${dir} "' does not exist.")
  ENDIF(NOT EXISTS ${dir})
ENDFOREACH(dir)

Live demo .

关于c++ - 如果 include_directories 中的路径之一不存在,为什么 CMakeLists 不抛出警告/错误(在编译期间)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58214882/

相关文章:

visual-studio - 我需要 ReSharper for Visual Studio 2015/2017

c++ - 为什么找不到这些符号?

visual-studio - Visual Studio 2017 和 CMake - 如何设置构建目录

c++ - Accelerate.framework 中的数据类型

c++ - SQL 选择多个 ids firebird

c++ - 在 KDevelop 中调试 KDevelop

c++ - 使用 cout 运算符重载字符串

c - "sprintf"使用 Visual Studio 2013 引发异常

visual-studio - 如何定义用于将多个文件添加到项目的模板?

c++ - 即使使用 -lstdc++fs 也无法链接 std::filesystem