Сборка AirSim / Unity на macOS (файл 'boost / filesystem.hpp' не найден) - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь установить AirSim / Unity на MacOS Catalina. Когда я запускаю Unity / build. sh я получаю фатальную ошибку:

In file included from /Users/nfirbas/Documents/AirSim/Unity/AirLibWrapper/AirsimWrapper/Source/Logger.cpp:3:
/Users/nfirbas/Documents/AirSim/Unity/AirLibWrapper/AirsimWrapper/Source/Logger.h:6:11: fatal error: 'boost/filesystem.hpp' file not found
        #include <boost/filesystem.hpp>
                 ^~~~~~~~~~~~~~~~~~~~~~
1 warning and 1 error generated.
make[2]: *** [CMakeFiles/AirsimWrapper.dir/Source/Logger.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....

Я установил boost с brew. Я впервые работаю с brew, поэтому я предполагаю, что мне нужно отредактировать мой CMakeList.txt. Я попытался изменить его сам, но у меня не получилось.

Мой CMakeLists.txt:

cmake_minimum_required(VERSION 3.5.0)

if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(MACOSX TRUE)
endif()

find_path(AIRSIM_ROOT NAMES AirSim.sln PATHS ".." "../.." "../../.." "../../../.." "../../../../.." "../../../../../..")
message(AirSim Root directory: ${AIRSIM_ROOT})

LIST(APPEND CMAKE_MODULE_PATH "${AIRSIM_ROOT}/cmake/cmake-modules")
LIST(APPEND CMAKE_MODULE_PATH "${RPC_SOURCE_DIR}/cmake")
LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")


INCLUDE("${AIRSIM_ROOT}/cmake/cmake-modules/CommonSetup.cmake")
INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/rpc-setup.cmake")
INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/mav-setup.cmake")
INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/airlib-setup.cmake")
INCLUDE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/airsimwrapper-setup.cmake")

IncludeEigen()

project(AirsimWrapper VERSION 0)

# RPC includes & source files
BuildRpc()
# MavLink source files
BuildMavLink()
#AirLib source files
BuildAirlib()
#AirsimWrapper source files
BuildAirsimWrapper()


###################### Link source files to library ######################################
if (${APPLE})
    add_library(
        ${PROJECT_NAME} MODULE
        ${RPC_LIBRARY_SOURCE_FILES}
        ${MAVLINK_LIBRARY_SOURCE_FILES}
        ${AIRLIB_LIBRARY_SOURCE_FILES}
        ${AIRSIMWRAPPER_LIBRARY_SOURCE_FILES}
    )

    set_target_properties(${PROJECT_NAME} PROPERTIES BUNDLE TRUE)
else ()
    add_library(
        ${PROJECT_NAME} SHARED
        ${RPC_LIBRARY_SOURCE_FILES}
        ${MAVLINK_LIBRARY_SOURCE_FILES}
        ${AIRLIB_LIBRARY_SOURCE_FILES}
        ${AIRSIMWRAPPER_LIBRARY_SOURCE_FILES}
    )
endif ()

target_link_libraries(${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT}  -lstdc++ -lpthread -lboost_filesystem)



##################### Build Options #############################3
# Rpc
RpcCheckMSVN()
RpcCmakePkg()
RpcMSVNConfig()

1 Ответ

1 голос
/ 18 марта 2020

Вы сказали вашей целевой библиотеке, чтобы она ссылалась на boost_filesystem, но вы не указали в вашем CMake , где , чтобы найти файлы заголовков Boost.

Идиоматический c способ найти Boost с использованием CMake - это использовать файлы конфигурации, которые теперь поставляются с Boost (например, BoostConfig.cmake), начиная с версии Boost 1.70 и выше. Вы можете использовать их, вызвав find_package(Boost ...), затем связавшись с импортированной целью Boost::filesystem:

# Tell CMake to locate Boost on your machine, specifically
# looking for the filesystem library.
find_package(Boost REQUIRED COMPONENTS filesystem)

...
# Link the Boost::filesystem target, which includes the Boost headers.
target_link_libraries(${PROJECT_NAME} PUBLIC
    ${CMAKE_THREAD_LIBS_INIT} 
    -lstdc++ 
    -lpthread 
    Boost::filesystem
)

Это также приведет к увеличению заголовков, так что вы не сможете Вам не требуется явный вызов target_include_directories(), чтобы указать, где находятся заголовки Boost.


Примечание. Чтобы убедиться, что заголовки установлены в вашей системе, вам может потребоваться дополнительно установить boost-devel к вашей boost установке.

...