cmake 项目构建中的 Graphviz 失败 - header 未找到

Graphviz in cmake project build fails - header not found

我想用 C++ 创建一个示例 Cmake 项目,看看 Graphviz 是否可以在大型项目中用于文档目的。 我的项目结构是我将 graphviz 从 github 克隆到外部目录并执行 git submodule update --init --recursive

Project
|external
|   graphviz
|main.cpp
|CMakeLists.txt

我的 Cmake 文件是

cmake_minimum_required(VERSION 3.17)
project(Example)
set(CMAKE_CXX_STANDARD 17)
set(SOURCES
    main.cpp
    )

add_subdirectory(external/graphviz)
add_executable(${PROJECT_NAME} ${SOURCES})

我使用 Windows 10 64 位、CLion 和编译器 LLVM Clang,并遵循指南 http://graphviz.org/doc/winbuild.html,因此我将 c:\Projekte\Example\external\graphviz\windows\dependencies\graphviz-build-utilities 添加到我的 Path 环境变量中。 因为 CMake 一开始就失败了,因为它找不到我添加到 Cmake 选项中的 Bison 和 Flex -DBISON_EXECUTABLE="c:\Projekte\Example\external\graphviz\windows\dependencies\graphviz-build-utilities\winflexbison\win_bison.exe" -DFLEX_EXECUTABLE="c:\Projekte\Example\external\graphviz\windows\dependencies\graphviz-build-utilities\winflexbison\win_flex.exe" CMake 现在成功运行,我可以构建项目,但是当我尝试像这样包含 gvc header 时它失败了,尽管它在包含本身

上没有显示错误
#include "external/graphviz/lib/gvc/gvc.h"
int main() {
   //do stuff
   return 0;
}

这是输出

====================[ Build | Example | Debug_Clang ]===========================
"C:\Program Files\JetBrains\CLion 2020.3.2\bin\cmake\win\bin\cmake.exe" --build C:\Projekte\Example\cmake-build-debug_clang --target Example
[1/2] Building CXX object CMakeFiles\Example.dir\main.cpp.obj
FAILED: CMakeFiles/Example.dir/main.cpp.obj 
C:\PROGRA~1\LLVM\bin\clang-cl.exe  /nologo -TP   -m64 /Zi /Ob0 /Od /RTC1 -MDd -std:c++17  /showIncludes /FoCMakeFiles\Example.dir\main.cpp.obj /FdCMakeFiles\Example.dir\ -c -- ..\main.cpp
In file included from ..\main.cpp:4:
../external/graphviz/lib/gvc/gvc.h(14,10): fatal error: 'types.h' file not found
#include "types.h"
         ^~~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.

找不到文件位于external/graphviz/lib/common

我试过的

我认为这是 Cmake 的问题,所以我尝试更改我的 Cmake 文件。通过删除 add:subdirectory() 命令并将其替换为

1.

add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/external/graphviz)
target_link_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/external/graphviz)
target_link_libraries(${PROJECT_NAME} PRIVATE ${GRAPHVIZ_LIB})
add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/external/graphviz)
target_link_libraries(${PROJECT_NAME} PUBLIC cgraph gvc)
  1. 而不是target_include_directories()
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/external/graphviz)
  1. 将库路径添加到 Cmake 选项 -DCMAKE_PREFIX_PATH="c:\Projekte\Example\external\graphviz\lib"

但我总是得到同样的错误。有人知道解决方案吗?

我直接在 graphviz 支持论坛上问了同样的问题并得到了答案,这是 Cmake 的一个已知问题并将我链接到这个线程 https://gitlab.com/graphviz/graphviz/-/issues/1477

Tl: 博士 Graphviz 目前无法构建为 Cmake 项目中的子目录。