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

时间:2017-01-11 18:13:11

标签: 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"
)

当我运行( 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/

1 个答案:

答案 0 :(得分:1)

您应该将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"
)

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

即使您通过target_include_directories功能添加标题,它也不会获取标题文件,这是有道理的,因为CMake不知道任何未明确添加到的文件目标。