首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确创建模块化项目的CMake文件

如何正确创建模块化项目的CMake文件
EN

Stack Overflow用户
提问于 2017-01-07 08:59:44
回答 1查看 843关注 0票数 1

假设C++项目A是我的主程序,项目B是我的共享对象(.so)模块。项目A由两个项目之间常见的源和标头组成。项目A在运行时加载模块.so文件。

项目A:

代码语言:javascript
复制
class-AI.cpp (It contains function funcA)
class-AI.h

class-AII.cpp
class-AII.h

class-AIII.cpp
class-AIII.h

main.cpp

项目B:(共享对象)

代码语言:javascript
复制
class-BI.cpp (Its inherit from class-AI)
class-BI.h

对于下面的CMake文件,两个项目都成功地构建了。

项目A CMakefile:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.6)
project(ProjectA)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES
        main.cpp
        class-AI.cpp
        class-AI.h
        class-AII.cpp
        class-AII.h
        class-AIII.cpp
        class-AIII.h)

add_executable(ProjectA ${SOURCE_FILES})

set(EXECUTABLE_OUTPUT_PATH /opt/ProjectA/bin/)

项目B CMakefile:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.6)
project(ProjectB)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES class-BI.cpp class-BI.h)
add_library(ProjectB SHARED ${SOURCE_FILES})    
set_target_properties(ProjectB PROPERTIES
        PREFIX ""
        LIBRARY_OUTPUT_DIRECTORY /opt/ProjectA/bin/)

但在运行时,项目A将出现以下错误:

代码语言:javascript
复制
undefined symbol: _ZN6class-AI4funcAEv

如何使用CMake文件将依赖项正确添加到项目B并解决此错误?(实际上,我想将我的netbeans C++项目更改为Jetbrains CLion)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-08 10:56:36

感谢Florianhis comment。通过将这行添加到Project文件中,解决了我的问题:

代码语言:javascript
复制
add_library(ProjectB SHARED IMPORTED GLOBAL)
set_target_properties(ProjectB PROPERTIES IMPORTED_LOCATION "/opt/ProjectA/bin/ProjectB.so")
target_link_libraries(ProjectA ProjectB)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41519666

复制
相关文章

相似问题

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