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



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

项目A:

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:(共享对象)

class-BI.cpp (Its inherit from class-AI)
class-BI.h

使用以下CMake文件,两个项目都成功构建。

项目 A CMakefile:

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:

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

但是在运行时,将出现以下错误:

undefined symbol: _ZN6class-AI4funcAEv

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

感谢弗洛里安的评论。我的问题解决了将此行添加到项目 A CMake 文件:

add_library(ProjectB SHARED IMPORTED GLOBAL)
set_target_properties(ProjectB PROPERTIES IMPORTED_LOCATION "/opt/ProjectA/bin/ProjectB.so")
target_link_libraries(ProjectA ProjectB)

最新更新