c++ - 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
问题描述
我的问题恰好是,每次我用 CMake 重新生成我的项目并尝试使用 VisualStudio 构建它时,它需要 2 次尝试,第一次总是失败,因为无法打开一个库,但这是已经在那了。我第二次构建它时,它完美无缺。
我想这是因为我让 VisualStudio 自动提取并包含该库,而我的 CMake 文件中的某些内容的顺序错误,但我真的不知道。
这是在项目中包含 Asio 和 Websocket++ 的 CMake 代码,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)
提前谢谢你的帮助
解决方案
为了确保ExternalProject
在您的可执行文件之前构建,您需要添加相应的依赖项:
add_dependencies(Test extasio)
同样,为了确保一个ExternalProject
在另一个之前构建,请指定它们之间的依赖关系:
add_dependencies(extwebsocketpp extasio)
推荐阅读
- javascript - 如何在 JavaScript 中创建自定义字母顺序?
- c - 找到平垫圈的面积和体积,我很困惑我的 C 程序是否正确。需要一些验证
- python - 是否可以在不安装搅拌机的情况下渲染 .blend 文件?
- powershell - Powershell - 验证安装了正确版本的 AppX 的条件
- javascript - 反应本机状态未在函数内部更新
- python - 为新数据框自动捕获现有表中的列
- android - 请帮助我尝试在空对象引用上调用虚拟方法“void com.google.android.gms.maps.GoogleMap.setOnMapLongClickListener”
- angular - 单击以编辑按钮并单击后保存 - 我该怎么做?
- google-apps-script - 带有下拉菜单并将行插入命名范围的 Google 表格对话框
- json - 使用 schema_of_json 函数从 JSON 列获取模式