Я должен построить свой проект 2 раза, в первый раз, когда он терпит неудачу, потому что он не может открыть библиотеку - PullRequest
0 голосов
/ 11 сентября 2018

Моя проблема заключается в том, что каждый раз, когда я воссоздаю свой проект с помощью CMake и пытаюсь потом построить его с помощью VisualStudio, требуется 2 попытки, первый раз, когда всегда происходит сбой, из-за библиотеки, которая не может быть открыта, но который уже есть. Второй раз я его строю, он работает без нареканий.

Полагаю, это из-за того, что я позволил VisualStudio автоматически извлекать эту библиотеку и включал эту библиотеку, а что-то в моем файле CMake было в неправильном порядке, но на самом деле я не знаю.

Это код CMake, который включает Asio и Websocket ++ в проект, файл, который VS не может открыть, - это файл Asio.lib в последней строке. Для работы Websocket ++ требуется Asio.

ADD_DEFINITIONS(-DASIO_STANDALONE )
ADD_DEFINITIONS(-D_WEBSOCKETPP_CPP11_RANDOM_DEVICE_)
ADD_DEFINITIONS(-D_WEBSOCKETPP_CPP11_TYPE_TRAITS_)

Include(ExternalProject)
ExternalProject_Add(extasio
    GIT_REPOSITORY https://github.com/tobiasrau/asio.git
    GIT_TAG cmake)
ExternalProject_Add(extwebsocketpp
    GIT_REPOSITORY https://github.com/TobiasPiontek/websocketpp.git)

include_directories(${EXTERNAL_INSTALL_LOCATION}/include "build/extwebsocketpp-prefix/src/extwebsocketpp/install/include" "build/extasio-prefix/src/extasio/include")
target_link_libraries(Test ${CMAKE_SOURCE_DIR}/build/extasio-prefix/src/extasio/lib/asio.lib)

Заранее спасибо, за помощь

1 Ответ

0 голосов
/ 11 сентября 2018

Чтобы быть уверенным, что ExternalProject собран перед вашим исполняемым файлом, вам нужно добавить соответствующую зависимость:

add_dependencies(Test extasio)

Аналогично, чтобы убедиться, что один ExternalProject собран перед другим, укажите зависимость между ними:

add_dependencies(extwebsocketpp extasio)
...