cmake link glew头文件

问题描述 投票:1回答:2

我正在尝试使用CMake(v 3.10.1)为我的项目添加外部库

我希望libs存在于特定的目录中,因为我希望尽可能保持它们的清洁

我的项目结构看起来像那样

Project
   |
   |-- main.cpp
   |-- CMakeLists.txt (top lvl)
   |
   |-- libs/
         |
         | -- glew-1.13.0
         | -- CMakeLists.txt (lib lvl)

顶级CMakeLists.txt

cmake_minimum_required (VERSION 2.6)
project (myproject)
add_executable(myproject main.cpp)

add_subdirectory (libs)

Lib lvl CMakeList.txt

### GLEW ###

include_directories(
    glew-1.13.0/include/
)

set(GLEW_SOURCE
    glew-1.13.0/src/glew.c
)

set(GLEW_HEADERS
)

add_library( GLEW_1130 STATIC
    ${GLEW_SOURCE}
    ${GLEW_INCLUDE}
)

target_link_libraries(GLEW_1130
  ${OPENGL_LIBRARY}
  ${EXTRA_LIBS}
)

main.cpp中

#include <iostream>
#include <GL/glew.h>


int main() {

    std::cout << "Hello World" << std::endl;
    return 0;
}

<GL/glew.h> headerfile not found

我在我的情况下缺少什么,以便我可以使用glew头文件?

c++ cmake glew
2个回答
2
投票

include_directories的影响不是全球性的:从libs/CMakeLists.txt执行,它不会影响顶级CMakeLists.txt

您可以“附加”包含目录到库目标:

# In libs/CMakeLists.txt
target_include_directories(GLEW_1130 PUBLIC glew-1.13.0/include/)

所以进一步链接到该库作为目标:

# In CMakeLists.txt
target_link_libraries(myproject GLEW_1130)

将自动将其include目录传播到可执行文件。


0
投票

不要将add_subdirectory第三方项目放入您自己的构建系统中,否则会污染您的配置。这里一个合理的方法是在您的系统上安装GLEW,并使用find_package将其作为项目的一部分包含在内:

cmake_minimum_required (VERSION 2.6)
project (myproject)
find_package(glew 1.13.0)
add_executable(myproject main.cpp)
target_link_libraries(myproject GLEW::glew)
© www.soinside.com 2019 - 2024. All rights reserved.