无法为基本PETSc程序生成makefile

时间:2015-05-13 23:59:44

标签: c++ makefile cmake mpi petsc

我有一个使用PETSC的非常基本的程序

ForEachPair(5, 5, (x, y) =>
{
    Console.Write(x + "," + y);
});

public void ForEachPair(int width, int height, Action<int, int> callback)
{
    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j < height; j++)
        {
            callback(i, j);
        }
    }
}

然而,当我尝试使用mpic ++进行编译时,我得到了 #include "PETSC/petsc.h" #include "PETSC/petscsys.h" #include "PETSC/petscmat.h" int main(int argc, char *argv[]) { PetscMPIInt rank,size; PetscInitialize(&argc,&argv,0,0); MPI_Comm_size(PETSC_COMM_WORLD,&size); MPI_Comm_rank(PETSC_COMM_WORLD,&rank); PetscPrintf(PETSC_COMM_WORLD,"Number of processors = %d, rank = %d\n",size,rank); PetscSynchronizedPrintf(PETSC_COMM_WORLD,"synchronized rank = %d\n",rank); MPI_Barrier(PETSC_COMM_WORLD); PetscFinalize(); return 0; } PETSC_COMM_WORLD和其他垃圾的未定义引用错误

我现在正在尝试使用PetscInitialize和cmake。这是我build

的尝试
CMakeLists

另外,我有一个目录 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(checkMPI) SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake-modules") set(PETSC_ARCH linux-gnu) set(PETSC_DIR l${PROJECT_SOURCE_DIR}/third-party/petsc) FIND_PACKAGE(PETSc REQUIRED) INCLUDE_DIRECTORIES(${PETSC_INCLUDES}) ADD_DEFINITIONS(${PETSC_DEFINITIONS}) ADD_EXECUTABLE(checkMPI checkMPI.cpp) TARGET_LINK_LIBRARIES(checkMPI ${PETSC_LIBRARIES}) ,其中包含PETSc的cmake-modules

然而,当我尝试通过键入cmake-modules然后ccmake ..来生成makefile时,我得到了输出

c

任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:1)

根据FindPETSC.cmakePETSC_ARCH的默认选项似乎是:

linux-gnu-c-debug 
linux-gnu-c-opt
x86_64-unknown-linux-gnu 
i386-unknown-linux-gnu

manual build时使用的那个。

CMake尝试查找文件${PETSC_DIR}/${PETSC_ARCH}/include/petscconf.h${PETSC_DIR}/bmake/${PETSC_ARCH}/petscconf.h