首页 > 解决方案 > 使用 cmake 编译 iOS 动态库(.framework)

问题描述

我已经使用 cmake 编译了一个 c++ 动态库,我想添加到我的 iOS 应用程序中。但是这个.framework的头文件目录是空的,我参考了cmake文档中写的CMakeFiles。不知道问题出在哪里?

任何帮助将不胜感激。

这是我的 CMake 脚本

cmake_minimum_required(VERSION 3.2)

project(Xml C CXX)

set(CMAKE_SYSTEM_NAME Darwin)

set(CMAKE_SYSTEM_PROCESSOR arm)

set(HEADERS
    ./include
)

include_directories(
    ${HEADERS}
)

aux_source_directory(. DIR_SRCS)

add_library(Xml SHARED
    ${DIR_SRCS}
    ${HEADERS}
)

set_target_properties(Xml PROPERTIES
    FRAMEWORK TRUE
    FRAMEWORK_VERSION CXX
    PUBLIC_HEADER ${HEADERS}
    XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
)

编译进度

Scanning dependencies of target Xml
[ 10%] Building CXX object CMakeFiles/Xml.dir/ILock.cpp.o
[ 20%] Building CXX object CMakeFiles/Xml.dir/ParamSet.cpp.o
[ 30%] Building CXX object CMakeFiles/Xml.dir/StringConvert.cpp.o
[ 40%] Building CXX object CMakeFiles/Xml.dir/XmlFile.cpp.o
[ 50%] Building CXX object CMakeFiles/Xml.dir/XmlInterface.cpp.o
[ 60%] Building CXX object CMakeFiles/Xml.dir/tinystr.cpp.o
[ 70%] Building CXX object CMakeFiles/Xml.dir/tinyxml.cpp.o
[ 80%] Building CXX object CMakeFiles/Xml.dir/tinyxmlerror.cpp.o
[ 90%] Building CXX object CMakeFiles/Xml.dir/tinyxmlparser.cpp.o
[100%] Linking CXX shared library Xml.framework/Xml
Copying OS X content Xml.framework/Versions/CXX/Headers/include
[100%] Built target Xml

编译动态库

标签: c++iosdynamiccmakeframeworks

解决方案


问题解决了。CMake 无法使用./include语法获取所有头文件。以下是修改后的 CMake 脚本。

set(HEADERS
    ./include/a.h
    ./include/b.h
    ./include/c.h
)

include_directories(
    ./include
)

aux_source_directory(. DIR_SRCS)

add_library(Xml SHARED
    ${DIR_SRCS}
    ${HEADERS}
)

set_target_properties(Xml PROPERTIES
    FRAMEWORK TRUE
    PUBLIC_HEADER "${HEADERS}"
)

推荐阅读