2

Wtv。3.2.2およびboostlibrariesv。1.47がコンピューターに正常にインストールされ、インストールプロセスでエラーは発生しませんでした。いくつかの単純なWtとBoostの例がコンパイルされ、テストプロセスで正しく実行されました。MSVC 2008用に構成されたCMakeを使用して、自分のWtプロジェクトのビルドファイルを作成します。

ただし、独自のプロジェクトをビルドしようとすると、このエラーが発生します(インクルードファイルを開くことができません:'boost / any.hpp')。私が見たように、boost/any.hppはWt/WApplicationヘッダーファイルに含まれています。

さらにヘルプが必要な場合は、CMakeLists.txtファイルの内容は次のとおりです。プロジェクトディレクトリに配置されたCMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(WT_EXAMPLE)

SET (WT_CONNECTOR "wthttp" CACHE STRING "Connector used (wthttp or wtfcgi)")

ADD_SUBDIRECTORY(source)

ソースディレクトリに配置されたCMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

SET(WT_INSTALL_DIR "C:/Program Files/WT/boost_1_47")
SET(BOOST_INSTALL_DIR "C:/Program Files/boost")

ADD_EXECUTABLE(
 GOP.wt
 Main.C
)

SET(WT_LIBS
 optimized wthttp debug wthttpd
 optimized wt debug wtd)

SET(BOOST_LIBS
 boost_signals boost_regex boost_thread boost_filesystem boost_system
 boost_random boost_date_time boost_program_options)

TARGET_LINK_LIBRARIES (
 GOP.wt
 ${WT_LIBS} ${BOOST_LIBS} ${SYSTEM_LIBS}
)

LINK_DIRECTORIES (
 ${WT_INSTALL_DIR}/lib/
 ${BOOST_INSTALL_DIR}/lib/
)

INCLUDE_DIRECTORIES(${WT_INSTALL_DIR}/include)
INCLUDE_DIRECTORIES(${BOOST_INSTALL_DIR}/include)

Wtビルドディレクトリに配置されたCMakeCache.txtで見たように、ライブラリをブーストするためのパスが見つかりましたが、この行はどうでしょうか。

//The directory containing a CMake configuration file for Boost.
Boost_DIR:PATH=Boost_DIR-NOTFOUND

Wtサポートフォーラムでこの質問をしましたが、約24時間回答がありませんでした...

更新:any.hppがC:\ Program Files \ boost \ boost_1_47 \ boost \ spirit \ home \ support \ Algorithm\any.hppに配置されていることがわかりました。したがって、any.hppを検索するパスの概念があると思います(ブーストディレクトリに直接含まれていません)。

4

2 に答える 2

1

問題が解決しました。新しいWtビルドを実行し、ブーストを新しいパスに配置して再構築し、このプロジェクトのCMakeListsをより慎重に作成しました。

于 2012-08-01T16:25:13.407 に答える
0

<boost/any.hpp>を含めるには

例えば

#include <boost/any.hpp>
#include <iostream>
#include <vector>
#include <string>

int main() {
    std::vector<boost::any> some_values;

    some_values.push_back(10);
    const char* c_str = "Hello there!";
    some_values.push_back(c_str);
    some_values.push_back(std::string("Wow!"));

    std::string& s = boost::any_cast<std::string&>(some_values.back());
    s += " That is great!\n";
    std::cout << s;
}

必要なのは次のような単純なcmakeファイルだけです

# Defines AppBase library target.
project(recipe_01)
cmake_minimum_required(VERSION 3.5)

include(GNUInstallDirs)

set(CMAKE_EXPORT_COMPILE_COMMANDS "ON")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})

if(CMAKE_CXX_STANDARD EQUAL 98 OR CMAKE_CXX_STANDARD LESS 14)
   message(FATAL_ERROR "app requires c++14 or newer")
elseif(NOT CMAKE_CXX_STANDARD)
   set(CMAKE_CXX_STANDARD 14)
   set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()

find_package(Boost 1.60 REQUIRED)

add_executable(main main.cpp)

target_link_libraries(main)

于 2021-06-26T14:31:55.103 に答える