У меня есть проект, который использует Boost, с CMake для системы сборки.В первый раз, когда я пытаюсь скомпилировать ALL_BUILD после генерации CMake, происходит сбой при связывании с ошибкой LNK2019 и 2 ошибками LNK2001 - но если я сделаю какие-либо изменения в CMakeLists.txt (даже просто добавив пробел) и скомпилирую снова, онработает просто отлично.
Вот мой CMakeLists.txt (Обновлено) :
project(OurProject)
set(CMAKE_MFC_FLAG 2)
file(GLOB_RECURSE sources
*.c
*.cpp
*.cc)
file(GLOB_RECURSE headers
*.h
*.hpp
*.inl)
file(GLOB_RECURSE resources
*.rc)
file(GLOB_RECURSE definitions
*.def)
set_source_files_properties(${resources} PROPERTIES LANGUAGE RC)
add_library(OurProject SHARED ${sources} ${headers} ${resources} ${definitions})
target_compile_options(OurProject
PRIVATE
-D_CRT_SECURE_NO_WARNINGS
-DNO_WARN_MBCS_MFC_DEPRECATION
)
find_package(Boost REQUIRED COMPONENTS filesystem thread regex)
add_subdirectory(../ourLib ourLib)
target_link_libraries(OurProject
PRIVATE
ourLib
Boost::regex
Boost::filesystem
Boost::thread
)
И вот три ошибки, с которыми он сталкивается:
LNK2019 unresolved external symbol "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXAEBVexception@std@@@Z) referenced in function "public: __cdecl boost::detail::shared_count::shared_count<class boost::io::basic_altstringbuf<char,struct std::char_traits<char>,class std::allocator<char> > *,class boost::io::basic_oaltstringstream<char,struct std::char_traits<char>,class std::allocator<char> >::No_Op>(class boost::io::basic_altstringbuf<char,struct std::char_traits<char>,class std::allocator<char> > *,class boost::io::basic_oaltstringstream<char,struct std::char_traits<char>,class std::allocator<char> >::No_Op)" (??$?0PEAV?$basic_altstringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@io@boost@@VNo_Op@?$basic_oaltstringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@12@@shared_count@detail@boost@@QEAA@PEAV?$basic_altstringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@io@2@VNo_Op@?$basic_oaltstringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@42@@Z)
LNK2001 unresolved external symbol "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXAEBVexception@std@@@Z)
LNK2001 unresolved external symbol "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXAEBVexception@std@@@Z)
Обновление 2 : Списки CMake нашей библиотеки.include_guard (GLOBAL)
project(ourLib)
set(CMAKE_MFC_FLAG 2)
add_library(ourLib
src/ourLibSource.cpp
include/ourLibHeader.h
)
target_include_directories(ourLib
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
target_compile_options(ourLib
PUBLIC
-D_AFXDLL
-D_AFXEXT
PRIVATE
-D_CRT_SECURE_NO_WARNINGS
-DNO_WARN_MBCS_MFC_DEPRECATION
)