简体   繁体   中英

how to link libraries in vcpkg to my library using cmake?

I am trying to use cmake and vcpkg to write a project in vs2019 recently.

I want to link the dynamic library in vcpkg to my own dynamic library, but I have encountered some troubles.

I hope someone can help me correct the mistake.

My project structure:

project
-engine
 -Engine.h
 -Engine.cpp
 -Window.h
 -Window.cpp
 -InstanceManager.h
 -InstanceManager.cpp
 -MouseListener.h
 -MouseListener.cpp
 -KeyboardListener.h
 -KeyboardListener.cpp
-main.cpp
-CMakeLists.txt

CMakeLists.txt:

cmake_minimum_required (VERSION 3.8)

project ("mario")

include_directories("./engine")

find_package(GLEW REQUIRED)
find_package(glfw3 CONFIG REQUIRED)

add_executable (mario main.cpp)

add_library(engine SHARED
"engine/Engine.h" "engine/Engine.cpp" 
"engine/Window.h" "engine/Window.cpp"
"engine/InstanceManager.h" "engine/InstanceManager.cpp" 
"engine/MouseListener.h" "engine/MouseListener.cpp" 
"engine/KeyboardListener.h" "engine/KeyboardListener.cpp")

target_link_libraries(engine PRIVATE GLEW::GLEW)
target_link_libraries(engine PRIVATE glfw)

target_link_libraries(mario PRIVATE engine)

It shows C1083 cannot open include file “gl/glew.h”: No such file or directory. However, when I write this:

cmake_minimum_required (VERSION 3.8)

project ("mario")

include_directories("./engine")

find_package(GLEW REQUIRED)
find_package(glfw3 CONFIG REQUIRED)

add_executable (mario main.cpp
"engine/Engine.h" "engine/Engine.cpp" 
"engine/Window.h" "engine/Window.cpp"
"engine/InstanceManager.h" "engine/InstanceManager.cpp" 
"engine/MouseListener.h" "engine/MouseListener.cpp" 
"engine/KeyboardListener.h" "engine/KeyboardListener.cpp")

target_link_libraries(mario PRIVATE GLEW::GLEW)
target_link_libraries(mario PRIVATE glfw)

It works fine.

Is this a bug or I made mistakes?

cmake_minimum_required (VERSION 3.8)

project ("mario")

include_directories("./engine")

set(CXX_STANDARD 11)

find_package(GLEW REQUIRED)
find_package(glfw3 CONFIG REQUIRED)

add_library(engine SHARED
"engine/Engine.h" "engine/Engine.cpp" 
"engine/Window.h" "engine/Window.cpp"
"engine/InstanceManager.h" "engine/InstanceManager.cpp" 
"engine/MouseListener.h" "engine/MouseListener.cpp" 
"engine/KeyboardListener.h" "engine/KeyboardListener.cpp")
target_link_libraries(engine PRIVATE GLEW::GLEW)
target_link_libraries(engine PRIVATE glfw)

add_executable (mario main.cpp)
target_link_libraries(mario PRIVATE GLEW::GLEW)
target_link_libraries(mario PRIVATE glfw)
target_link_libraries(mario PRIVATE engine)

executable file should also link to libraries in vcpkg.

target_link_libraries(engine PRIVATE GLEW::GLEW)
target_link_libraries(engine PRIVATE glfw)

are wrong!

it should be:

target_link_libraries(engine PUBLIC GLEW::GLEW)
target_link_libraries(engine PUBLIC glfw)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM