nca*_*011 3 windows boost cmake
我正在创建一个 C++ Windows 服务。我想将 Boost Process 添加到我的应用程序中,但由于某种原因我不断收到此错误:
链接:致命错误 LNK1104:无法打开文件“optimized.lib”
在我尝试添加 Boost 之前,一切都运行良好。当我打开 Visual Studio 解决方案时,我注意到应用程序正在尝试与我不熟悉的库optimized.lib链接。debug.lib当我尝试添加 Boost 时,CMake 仅尝试链接这些库。
我的目录结构:
UpdateService/
CMakeLists.txt
app/
CMakeLists.txt
Driver.cpp
build/
include/
stdafx.h
UpdateService/
# a bunch of *.h files
src/
CMakeLists.txt
# a bunch of *.cpp files
Run Code Online (Sandbox Code Playgroud)
我的UpdateService/CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.12...3.14)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
project(UpdateService
VERSION 1.0
DESCRIPTION "Service that runs the update manager"
LANGUAGES CXX)
add_subdirectory(src)
add_subdirectory(app)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT UpdateService)
Run Code Online (Sandbox Code Playgroud)
我的UpdateService/src/CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.12...3.14)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
set(FMT_DIR "E:/Repositories/fmt-5.3.0")
set(FMT_INCLUDE "${FMT_DIR}/include")
set(SPDLOG_INCLUDE "E:/Repositories/spdlog/include")
set(Boost_DEBUG ON)
# set(Boost_USE_STATIC_LIBS ON)
# set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost 1.67 REQUIRED COMPONENTS system filesystem)
# Needed to suppress a warning in boost process.
add_compile_definitions(_SCL_SECURE_NO_WARNINGS)
add_library(UpdateServiceLib STATIC
"${CMAKE_SOURCE_DIR}/include/stdafx.h"
"${CMAKE_SOURCE_DIR}/include/UpdateService/CLI11.hpp"
"${CMAKE_SOURCE_DIR}/include/UpdateService/Config.h"
"${CMAKE_SOURCE_DIR}/include/UpdateService/CmdParams.h"
"${CMAKE_SOURCE_DIR}/include/UpdateService/LogUtils.h"
"${CMAKE_SOURCE_DIR}/include/UpdateService/ServiceBase.h"
"${CMAKE_SOURCE_DIR}/include/UpdateService/UpdateService.h"
"${FMT_DIR}/src/format.cc"
"Config.cpp"
"CmdParams.cpp"
"LogUtils.cpp"
"ServiceBase.cpp"
"UpdateService.cpp")
target_include_directories(UpdateServiceLib PUBLIC
"${Boost_INCLUDE_DIRS}"
"${CMAKE_SOURCE_DIR}/include"
"${FMT_INCLUDE}"
"${SPDLOG_INCLUDE}")
target_link_libraries(UpdateServiceLib PUBLIC "${Boost_LIBRARIES}")
Run Code Online (Sandbox Code Playgroud)
我的UpdateService/app/CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.12...3.14)
if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()
add_executable(UpdateService "Driver.cpp")
target_include_directories(UpdateService
PRIVATE "${CMAKE_SOURCE_DIR}/include" "${FMT_INCLUDE}" "${SPDLOG_INCLUDE}")
target_link_libraries(UpdateService PRIVATE UpdateServiceLib)
Run Code Online (Sandbox Code Playgroud)
我正在用这样的东西构建项目:
rmdir /S /Q build
mkdir build
mkdir build\x64
pushd build\x64
cmake -G "Visual Studio 14 2015 Win64" ..\..
cmake --build . --config Debug
popd
Run Code Online (Sandbox Code Playgroud)
删除周围的双引号${Boost_LIBRARIES}。
双引号告诉 CMake 将包含的值视为单个参数,但Boost_LIBRARIES实际上是一个列表(多值变量)。
通常,双引号仅用于:
“字符串文字”(当参数不包含变量的取消引用时),例如
"abc"
Run Code Online (Sandbox Code Playgroud)当明确知道参数代表单个值时,例如
"${CMAKE_SOURCE_DIR}/include"
Run Code Online (Sandbox Code Playgroud)“LIBRARIES”一词的复数意味着该Boost_LIBRARIES变量可能包含多个值,因此请勿将其用双引号引起来。
| 归档时间: |
|
| 查看次数: |
1771 次 |
| 最近记录: |