cmake框架目标不复制标头或资源?

use*_*235 7 macos frameworks cmake

我正在尝试使用cmake创建 OS X 框架。这是我的CMakeLists.txt文件:

project( Foo)

cmake_minimum_required (VERSION 3.7)

add_library( Foo SHARED
foo.c
)

set_target_properties( Foo PROPERTIES
FRAMEWORK TRUE
RESOURCE "foo.md"
PUBLIC_HEADER "foo.h"
)
Run Code Online (Sandbox Code Playgroud)

当我运行时生成了( mkdir build ; cd build ; cmake .. ; make)一个Foo.framework,但标题和资源没有出现在其中。我缺少什么?(cmake版本3.7.1)


如何重现。保存上面的CMakeLists.txt。现在执行:

#!/bin/sh

echo "int version = 1;" > foo.c
touch foo.h
touch foo.md
( mkdir build ; cd build ; cmake .. ; make)
ls -R build/Foo.framework/
Run Code Online (Sandbox Code Playgroud)

tty*_*ty6 3

您应该添加PUBLIC_HEADER到您的add_library

project( Foo )

cmake_minimum_required (VERSION 3.7)

add_library( Foo SHARED
    foo.c
    foo.h
)

set_target_properties( Foo PROPERTIES
    FRAMEWORK TRUE
    RESOURCE "foo.md"
    PUBLIC_HEADER "foo.h"
)
Run Code Online (Sandbox Code Playgroud)

Cmake 不知道从哪里复制头文件,除非您将其添加到目标中。重建现在将复制foo.hFoo.framework/Headers/. 可能还有其他方法可以做到这一点,但这肯定会产生预期的结果。

即使您通过target_include_directories函数添加标头,它也不会获取标头文件,这是有道理的,因为 CMake 不知道任何未显式添加到目标的文件。