首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译cpp代码包括使用Cmake的PETSc

编译cpp代码包括使用Cmake的PETSc
EN

Stack Overflow用户
提问于 2021-06-07 23:06:45
回答 1查看 150关注 0票数 1

我想在cpp代码中使用PETSc。我安装了PETSc,当运行cmd echo $PETSC_DIR时,我得到了库的路径。我写了一个hello world代码然后

代码语言:javascript
复制
#include "petsc.h"
#include <iostream>

int main()
{
   std::cout << "Hello Wold" << std:endl;
}

CMakeLists.txt如下:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.20.3)
project(ddm_library)

include_directories(include)

file(GLOB SOURCES "src/*.cc")

add_executable(main ${SOURCES})

并运行以下cmds

代码语言:javascript
复制
mkdir build
cd build
cmake CMAKE_INCLUDE_PATH=/opt/petsc/linux-c-opt/include ..
make

当我运行最后一个cmd时,我得到了以下错误

代码语言:javascript
复制
/home/main.cc:5:10: fatal error: petsc.h: No such file or directory
    5 | #include "petsc.h"
      |          ^~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/main.dir/build.make:76: CMakeFiles/main.dir/src/main.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/main.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

我哪里弄错了?

EN

回答 1

Stack Overflow用户

发布于 2021-06-08 17:30:38

我更改了CMakeLists.txt并使用了find_package(PkgConfig),现在它可以工作了。CMakeLists.txt的最终版本如下所示

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.20.3)


project(ddm_library)

# PkgConfig 
find_package(PkgConfig)

# PETSc
if (PKG_CONFIG_FOUND)
    pkg_check_modules(PETSC PETSc)
endif()

if (PETSC_FOUND)
    list(APPEND COMPILE_OPTIONS ${PETSC_CFLAGS})

    include_directories(${PETSC_INCLUDE_DIRS})
    
    set(LINK_FLAGS "${LINK_FLAGS} ${PETSC_LDFLAGS}")   
    
    list(APPEND LIBRARIES ${PETSC_LINK_LIBRARIES})   
    
    set(CMAKE_REQUIRED_FLAGS ${PETSC_CFLAGS})   
    
    set(CMAKE_REQUIRED_INCLUDES "${PETSC_INCLUDE_DIRS}")
endif()

include_directories(include )

file(GLOB SOURCES "src/*.cc")

add_executable(main ${SOURCES})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67874148

复制
相关文章

相似问题

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