如何强制cmake不要找到mpicxx但只能找到mpicc

时间:2014-03-05 08:15:03

标签: makefile cmake mpi build-tools

我正在尝试使用cmake为MPI程序生成Makefile。我的问题是我只安装了mpicc(正常工作)mpicxx在PATH中,但是来自其他安装(我的系统上安装了多个MPI)。我不想使用mpicxx而只使用mpicc(以及mpicc的包含文件和库)。

Bellow是一种有点硬编码的工作,它可以运作

    cmake_minimum_required(VERSION 2.8)

    PROJECT(mympihello)
    ADD_EXECUTABLE(hellompi hellompi.c)
    SET(CMAKE_C_COMPILER mpicc)
    target_link_libraries(hellompi /export/home2/SEECS/bibrak/work/programs/installs/mpich3/include)

以下是通用方式(据我所知),我想使用这种方法,但强制不使用mpicxx(没有找到它,丢弃mpicxx)

    cmake_minimum_required(VERSION 2.8)

    PROJECT(mympihello)
    ADD_EXECUTABLE(hellompi hellompi.c)

  # Require MPI for this project:
    find_package(MPI REQUIRED)
    set(CMAKE_CXX_COMPILE_FLAGS ${CMAKE_CXX_COMPILE_FLAGS} ${MPI_COMPILE_FLAGS})
    set(CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS} ${MPI_LINK_FLAGS})
    include_directories(MPI_INCLUDE_PATH)
    target_link_libraries(hellompi ${MPI_LIBRARIES})

此外,指出如何为使用MPI的程序生成.so(共享库)将会很有帮助。

由于

1 个答案:

答案 0 :(得分:1)

我有办法做到这一点。这是我使用cmake生成.so(共享库)的解决方案,但只使用mpicc而不是mpicxx

    cmake_minimum_required(VERSION 2.8)

    project(projectname C)

    SET(    SOURCE_FILES
            sourcefile1.c
            sourcefile2.c
            sourcefile3.c
    )

    ADD_LIBRARY(projectname SHARED ${SOURCE_FILES})
    find_package(MPI)
    if(MPI_FOUND)
    set(CMAKE_C_COMPILE_FLAGS ${CMAKE_C_COMPILE_FLAGS} ${MPI_C_COMPILE_FLAGS})
    set(CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS} ${MPI_C_LINK_FLAGS})

    include_directories(${MPI_C_INCLUDE_PATH})
    endif(MPI_FOUND)
    target_link_libraries(projectname ${MPI_C_LIBRARIES})

这会生成一个Makefile,用于创建projectname.so共享库。