首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMAKE C宏未传播到包含目录

CMAKE C宏未传播到包含目录
EN

Stack Overflow用户
提问于 2022-01-08 04:09:20
回答 1查看 177关注 0票数 1

我有一个开放源码C库,我想编译,但要将编译器设置为识别OpenMPI,必须将C宏PARALLEL设置为1,以便在头文件中:

代码语言:javascript
复制
#ifdef PARALLEL
#include <mpi.h>
#endif

会被处决。下面是我正在处理的CMAKE文件,它将src目录添加为子目录,将头文件添加为include_directory。

使用它可以为src目录中的所有内容正确设置C宏PARELLEL。但是,包含目录中的所有内容都保留了未定义的PARALLEL

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.14)
project(SDFC VERSION 14.4.2 LANGUAGES C)

option(PARALLEL "Using MPI" ON)


set(TOPLEVEL "${CMAKE_CURRENT_SOURCE_DIR}")
#file(GLOB SOURCE_ALL include/*inc CMakeLists.txt Makefile*)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic -g")
if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
   set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -gdwarf-2")
endif()

set(SDFC_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" CACHE PATH
    "Path to include files for SDF C library")
set(SDFC_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/src" CACHE PATH
    "Path to build directory for SDF C library")


include_directories(include)
add_subdirectory(src)

if(PARALLEL)
   find_package(MPI REQUIRED)
   include_directories(${MPI_C_INCLUDE_PATH})
   add_compile_definitions(-DPARALLEL)
   #add_compile_definitions(-DPARALLEL)
   include(CMake/CheckMPIVersion.cmake)
endif()



install(DIRECTORY include DESTINATION . COMPONENT develop PATTERN uthash.h EXCLUDE)
install(FILES src/uthash/include/uthash.h DESTINATION include COMPONENT develop)

我用:

代码语言:javascript
复制
cmake .
make

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2022-01-08 21:37:42

因此,仅仅因为一个静态库是使用CMAKE编译和构建的,而CMAKE为头文件(例如library.h)设置了预处理宏:

代码语言:javascript
复制
#ifdef PARALLEL
#include <mpi.h>
#endif

并不意味着您可以在新代码中使用静态库和头文件,而无需定义预处理器宏。

因此,在使用以下方法创建这个静态库之后:

代码语言:javascript
复制
cmake .
make

我有一个library.a文件

为了将它链接到我的新代码,比如使用main.c#include "library.h",我不仅必须将库和头文件目录包括在命令行中,而且还必须按如下方式定义预处理器宏PARALLEL

代码语言:javascript
复制
gcc -DPARALLEL=1 -L/Path_To_Library_Directory -I/Path_To_Include_Directory main.c -o main -llibrary
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70629536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档