Cmake ищет boost lib по полному имени вместо явно короткого

Я разрабатываю проект, который использует библиотеки скомпилированные Boost. Я хочу запустить регресс на бамбука. Моя идея состояла в том, чтобы использовать boost из моих системных путей при сборке на моем компьютере и скопированный libboost_program_options.lib при сборке на бамбуке. Я копирую заголовки boost и libboost_program_options, чтобы они были в папке CMAKE_SOURCE_DIR / boost. Библиотека была скомпилирована с —layout = system, поэтому имя файла — libboost_program_options.lib.

Вот так выглядит мой cmake

cmake_minimum_required (VERSION 3.4)
project (Project)

file(GLOB SOURCES src/*.cpp)

set (SOURCE_FILES main.cpp other.cpp)

if (WIN32)
set (SOURCE_FILES ${SOURCE_FILES} many_other_windows.cpp )
endif (WIN32)

if (UNIX)
set (SOURCE_FILES ${SOURCE_FILES} many_other_unix.cpp)
endif (UNIX)set(Boost_USE_STATIC_LIBS ON)

# This is a hint for find_package to look for boost libs / includes in this dirs but it doesnt work
set(BOOST_INCLUDEDIR ${CMAKE_SOURCE_DIR}/boost)
set(BOOST_LIBRARYDIR ${CMAKE_SOURCE_DIR}/boost)

find_package(Boost 1.63.0 COMPONENTS program_options)

if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
set(TARGET_LINK_LIBRARIES ${Boost_LIBRARIES})

else()
include_directories(${CMAKE_SOURCE_DIR})
link_directories(${CMAKE_SOURCE_DIR}/boost)
if (WIN32)
set(TARGET_LINK_LIBRARIES libboost_program_options)
endif (WIN32)
if (UNIX)
set(TARGET_LINK_LIBRARIES libboost_program_options.a)
endif (UNIX)
endif()add_executable (Project ${SOURCE_FILES})if (WIN32)
set(TARGET_LINK_LIBRARIES ${TARGET_LINK_LIBRARIES} shlwapi)
endif (WIN32)target_link_libraries(Project ${TARGET_LINK_LIBRARIES})

часть файла проекта visual studio

введите путь / project.vcxproj:

(...)
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;libboost_program_options.lib;shlwapi.lib</AdditionalDependencies>
(...)

И вызов компоновщика

04-Apr-2017 17:58:28      D:\MIDDLEWARE\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\link.exe /ERRORREPORT:QUEUE /OUT:"D:\bamboo-home\xml-data\build-dir\AS-CA-W64\Project\bin\Release\Project.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"D:/bamboo-home/xml-data/build-dir/AS-CA-W64/PostCompilator/boost" /LIBPATH:"D:/bamboo-home/xml-data/build-dir/AS-CA-W64/PostCompilator/boost/Release" kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib libboost_program_options.lib shlwapi.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:"D:/bamboo-home/xml-data/build-dir/AS-CA-W64/Project/bin/Release/Project.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:/bamboo-home/xml-data/build-dir/AS-CA-W64/PostCompilator/bin/Release/Project.lib" /MACHINE:X64  /machine:x64 Project.dir\Release\main.obj

04-Apr-2017 17:58:28    LINK : fatal error LNK1104: cannot open file 'libboost_program_options-vc140-mt-1_64.lib' [D:\bamboo-home\xml-data\build-dir\AS-CA-W64\Project\build\Project\Project.vcxproj]
04-Apr-2017 17:58:28    Done Building Project "D:\bamboo-home\xml-data\build-dir\AS-CA-W64\Project\build\Project\Project.vcxproj" (default targets) -- FAILED.

Обратите внимание, что в cmake короткое имя изменилось на полное имя с именем и версией компилятора.

Кто-нибудь знает, как заставить cmake найти эту библиотеку?
Кто-нибудь есть какие-либо предложения, как я могу сделать это лучше, чтобы мой проект можно было собирать как на моем компьютере, с увеличением системных путей, так и на бамбуке, где я хочу скопировать библиотеку? Может быть, у кого-то есть лучшая идея, как интегрировать повышение в мой проект по бамбуку

С наилучшими пожеланиями

0

Решение

Причина в том, что заголовочные файлы boost добавляют некоторые прагмы, которые автоматически ищут файл .lib, автоматически заполняя его имя. Это то, что заставило cmake искать полное имя библиотеки «libboost_program_options-vc140-mt-1_64.lib». Я решил это, добавив:

add_definitions(-DBOOST_ALL_NO_LIB) # disabling of auto filling boost libs names to versioned
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector