首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cmake项目构建中的Graphviz失败-找不到标头

问cmake项目构建中的Graphviz失败-找不到标头
EN

Stack Overflow用户
提问于 2021-08-04 13:31:00
回答 1查看 208关注 0票数 0

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

代码语言:javascript
复制
Project
|external
|   graphviz
|main.cpp
|CMakeLists.txt

我的Cmake文件是

代码语言:javascript
复制
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})

我使用Windows1064bit、CLion和作为编译器的LLVM并遵循指南http://graphviz.org/doc/winbuild.html,所以我在Path环境变量中添加了c:\Projekte\Example\external\graphviz\windows\dependencies\graphviz-build-utilities。因为CMake在一开始就失败了,因为它找不到Bison和Flex,所以我在Cmake options中添加了-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头时,它就失败了,尽管它本身没有显示出任何错误。

代码语言:javascript
复制
#include "external/graphviz/lib/gvc/gvc.h"
int main() {
   //do stuff
   return 0;
}

这是输出

代码语言:javascript
复制
====================[ 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.

未找到的文件位于外部/graphviz/lib/common

我试过什么

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

1.

代码语言:javascript
复制
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})

  1. ​

代码语言:javascript
复制
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)

target_include_directories()代替

代码语言:javascript
复制
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/external/graphviz)

将库路径-DCMAKE_PREFIX_PATH="c:\Projekte\Example\external\graphviz\lib"添加到Cmake选项中的

但我总是犯同样的错误。有人知道解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 06:11:44

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

Tl: Graphviz博士目前不能作为Cmake项目的子目录构建。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68652171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档