【问题标题】:cmake framework target does not copy header or resource?cmake框架目标不复制标头或资源?
【发布时间】:2017-05-26 15:44:54
【问题描述】:

我正在尝试使用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/

【问题讨论】:

    标签: macos frameworks cmake


    【解决方案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 不知道任何未明确添加到目标的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      相关资源
      最近更新 更多