代码之家  ›  专栏  ›  技术社区  ›  Bibrak

如何强制cmake不查找mpicxx而只查找mpicc

  •  1
  • Bibrak  · 技术社区  · 12 年前

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

    贝娄是一个有点硬编码的作品,它很有效

        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 回复  |  直到 12 年前
        1
  •  2
  •   Bibrak    12 年前

    下面是我使用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})
    

    这将生成创建projectname.so共享库的Makefile。