如何在vcpkg中使用osgearth

时间:2019-06-13 11:11:07

标签: vcpkg osgearth

我已经使用以下命令用vcpkg安装了osgearth软件包:

vcpkg.exe install osgearth:x64-windows

现在我要使用CMake。

cmake_minimum_required (VERSION 3.10.0)

project (osgmap)

add_definitions (-DOSGMAP_EXPORTS)

include_directories (${CMAKE_CURRENT_SOURCE_DIR}/..)
find_package (Osg REQUIRED)
find_package(OsgEarth REQUIRED)

set (PROJECT_SRC
  Dummy.cpp
  )

add_library (${PROJECT_NAME} SHARED ${PROJECT_SRC})
target_link_libraries (${PROJECT_NAME} mapapi)
target_compile_features (${PROJECT_NAME} PUBLIC cxx_std_17)

问题是我找不到osgearth软件包。我尝试了其他选择。

如何在CMake项目中使用随vcpkg一起安装的OsgEarth?

2 个答案:

答案 0 :(得分:0)

简短的答案是,在cmake发行版中有findosg *模块,并且没有任何osgEarth模块可以自动查找程序包路径。包是同时位于库和包含库中的配置或模块定义。 Vcpkg似乎无法自动执行软件包定义,它依赖于CMake安装的模块。可以使用find_libraryfind_path来定位osgearth文件。

find_library(OSGEARTH_LIBRARY osgearth)

假设您运行vcpkg集成,并将-DCMAKE_TOOLCHAIN_FILE与cmake一起使用。可以找到用vcpkg构建的所有库,但不是全部作为软件包。

答案 1 :(得分:0)

在正确设置Context之后,您需要提供一个Reducer文件。您可以使用:

CMAKE_TOOLCHAIN_FILE

然后将其添加到您的FindOsgEarth.cmake文件夹和# This module defines # OSGEARTH_LIBRARY # OSGEARTH_FOUND, if false, do not try to link to osg # OSGEARTH_INCLUDE_DIRS, where to find the headers # OSGEARTH_INCLUDE_DIR, where to find the source headers # to use this module, set variables to point to the osg build # directory, and source directory, respectively # OSGEARTHDIR or OSGEARTH_SOURCE_DIR: osg source directory, typically OpenSceneGraph # OSGEARTH_DIR or OSGEARTH_BUILD_DIR: osg build directory, place in which you've # built osg via cmake ###### headers ###### MACRO( FIND_OSGEARTH_INCLUDE THIS_OSGEARTH_INCLUDE_DIR THIS_OSGEARTH_INCLUDE_FILE ) FIND_PATH( ${THIS_OSGEARTH_INCLUDE_DIR} ${THIS_OSGEARTH_INCLUDE_FILE} PATHS ${OSGEARTH_DIR} $ENV{OSGEARTH_SOURCE_DIR} $ENV{OSGEARTHDIR} $ENV{OSGEARTH_DIR} /usr/local/ /usr/ /sw/ # Fink /opt/local/ # DarwinPorts /opt/csw/ # Blastwave /opt/ [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;OSGEARTH_ROOT]/ ~/Library/Frameworks /Library/Frameworks PATH_SUFFIXES /include/ ) ENDMACRO( FIND_OSGEARTH_INCLUDE THIS_OSGEARTH_INCLUDE_DIR THIS_OSGEARTH_INCLUDE_FILE ) FIND_OSGEARTH_INCLUDE( OSGEARTH_INCLUDE_DIR osgEarth/Version ) ###### libraries ###### MACRO( FIND_OSGEARTH_LIBRARY MYLIBRARY MYLIBRARYNAME ) FIND_LIBRARY(${MYLIBRARY} NAMES ${MYLIBRARYNAME} PATHS ${OSGEARTH_DIR} $ENV{OSGEARTH_BUILD_DIR} $ENV{OSGEARTH_DIR} $ENV{OSGEARTHDIR} $ENV{OSG_ROOT} ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;OSGEARTH_ROOT]/lib /usr/freeware PATH_SUFFIXES /lib/ /lib64/ /build/lib/ /build/lib64/ /Build/lib/ /Build/lib64/ ) ENDMACRO(FIND_OSGEARTH_LIBRARY LIBRARY LIBRARYNAME) FIND_OSGEARTH_LIBRARY( OSGEARTH_LIBRARY osgEarth) FIND_OSGEARTH_LIBRARY( OSGEARTHFEATURES_LIBRARY osgEarthFeatures) FIND_OSGEARTH_LIBRARY( OSGEARTHUTIL_LIBRARY osgEarthUtil ) FIND_OSGEARTH_LIBRARY( OSGEARTHQT_LIBRARY osgEarthQt ) FIND_OSGEARTH_LIBRARY( OSGEARTHSYMBOLOGY_LIBRARY osgEarthSymbology ) FIND_OSGEARTH_LIBRARY( OSGEARTHANNOTATION_LIBRARY osgEarthAnnotation ) SET( OSGEARTH_FOUND "NO" ) IF( OSGEARTH_LIBRARY AND OSGEARTH_INCLUDE_DIR ) SET( OSGEARTH_FOUND "YES" ) SET( OSGEARTH_INCLUDE_DIRS ${OSGEARTH_INCLUDE_DIR}) GET_FILENAME_COMPONENT( OSGEARTH_LIBRARIES_DIR ${OSGEARTH_LIBRARY} PATH ) ENDIF( OSGEARTH_LIBRARY AND OSGEARTH_INCLUDE_DIR ) 中:

CMakeModules