1

cmake を使用して MPI プログラムの Makefile を生成しようとしています。私が抱えている問題は、mpicc のみがインストールされている (正しく動作している) ことです。mpicxx は PATH にありますが、他のインストールからのものです (私のシステムには複数の MPI がインストールされています)。mpicxx は使用せず、mpicc (および 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})

さらに、MPI を使用するプログラムの .so (共有ライブラリ) を生成する方法を教えていただけると助かります。

ありがとう

4

1 に答える 1

2

どうにかしてなんとかできました。これは、cmakeを使用して.so(共有ライブラリ)を生成するための私の解決策ですが、mpicxxではなくmpiccのみを使用しています

    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 共有ライブラリを作成する Makefile が生成されます。

于 2014-03-05T08:56:48.407 に答える