2017-12-27 262 views
1

我想外部庫添加到使用CMake的我的項目(V 3.10.1)cmake的鏈接GLEW頭文件

我希望庫生活在一個特定的目錄,因爲我喜歡保持清潔儘可能

我的項目結構看起來像

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) 

庫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頭文件?

回答

2

include_directories影響是不是全球:從libs/CMakeLists.txt執行,但不會對頂級CMakeLists.txt影響。

您可以 「附加」 包括目錄庫目標

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

所以futher與該庫鏈接爲目標

# In CMakeLists.txt 
target_link_libraries(myproject GLEW_1130) 

會自動傳播它包括目錄可執行文件。

+0

的感謝!那就是訣竅 – abdoe

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)