2014-03-05 44 views
1

我正在嘗試使用cmake爲MPI程序生成Makefile。我遇到的問題是,我只安裝了mpicc(正常工作),mpicxx在PATH中,但是來自其他安裝(我的系統上安裝了多個MPI)。我不想使用mpicxx,而只使用mpicc(以及mpicc的包含文件和庫)。如何強制cmake不能找到mpicxx,但只能找到mpicc

貝婁是一個有點硬編碼的努力和它的作品

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}) 

此外,這將有助於點我對如何生成的.so(共享庫)對於使用MPI這種方案。

感謝

回答

1

我一些如何成功地做到這一點。這是我的解決方案來使用cmake生成。所以(共享庫),但只有用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}) 

這生成創建projectname.so共享庫生成文件。