我试图使用CMake (v3.10.1)将外部库添加到我的项目中。
我希望lib能够生活在特定的目录中,因为我希望保持它尽可能干净。
我的项目结构是这样的
Project
|
|-- main.cpp
|-- CMakeLists.txt (top lvl)
|
|-- libs/
|
| -- glew-1.13.0
| -- CMakeLists.txt (lib lvl)顶级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头文件了?
发布于 2017-12-27 14:55:37
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)将自动将其包含目录传播到可执行文件。
发布于 2017-12-27 14:58:39
不要将第三方项目放入您自己的构建系统中,否则会污染您的配置。这里一种合理的方法是在您的系统上安装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)https://stackoverflow.com/questions/47994121
复制相似问题