首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake include_directories跳过OS框架

CMake include_directories跳过OS框架
EN

Stack Overflow用户
提问于 2015-10-25 16:25:27
回答 1查看 3.3K关注 0票数 4

我在上使用CMake 3.3.2。如果我将框架路径放入include_directories中,生成的Makefile不包含该目录。一个简短的例子:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.0)
project(testproj)
include_directories(/System/Library/Frameworks/OpenGL.framework)
add_library(testlib test.c)

制造输出:

代码语言:javascript
复制
Scanning dependencies of target testlib
/Library/Developer/CommandLineTools/usr/bin/make -f CMakeFiles/testlib.dir/build.make CMakeFiles/testlib.dir/build
[ 50%] Building C object CMakeFiles/testlib.dir/test.c.o
/Library/Developer/CommandLineTools/usr/bin/cc    -o CMakeFiles/testlib.dir/test.c.o   -c /Users/wrar/test/test.c

我期望include_directories命令对编译器行产生影响,由于正式的OPENGL_INCLUDE_DIR有我在示例中传递的值,所以我希望它是一个正确的值。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-27 09:35:41

把我的评论变成一个答案

标准框架包括路径由CMake过滤

CMake对OS框架有很多特殊处理。其中之一是删除显式命名的框架包含和库搜索路径(请参阅此提交)。

我同意这让人困惑

代码语言:javascript
复制
find_package(OpenGL REQUIRED)
message(STATUS "OPENGL_INCLUDE_DIR: ${OPENGL_INCLUDE_DIR}")
include_directories(${OPENGL_INCLUDE_DIR})
add_library(...)

确实返回OPENGL_INCLUDE_DIR: /System/Library/Frameworks/OpenGL.framework,但在cc命令行中找不到此路径。

但是这个搜索路径是隐式的,这意味着编译器最清楚在哪里可以找到框架的头文件。因此,在CMake中对OS框架包含/库目录的过滤确实反映了在使用框架时编译器/链接器的特殊处理。

编译器如何找到框架的包含文件?

由框架的名称指定为包含的目录名。请参阅MAC开发人员库/框架编程指南/包括框架

使用#include指令在代码中包含框架头文件。..。 #包括

有关更多详细信息,请参阅cmake在OS X上找不到gl.h

我刚刚测试了您的示例,并将#include <OpenGL/glext.h>添加到test.c中,并找到了框架中的标头。

如果不希望首先找到OpenGL标准框架(默认情况),请参阅文档并查找CMAKE_FIND_FRAMEWORK

或者,如果您在OpenGL中有自己的/some/other/path发行版--并且省略了find_package(OpenGL)的使用--您可以给出include_directories(SYSTEM /some/other/path)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33332021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档