2017-04-04 25 views
0

私はブーストコンパイルされたライブラリを使用するプロジェクトを開発しています。私はBambooの回帰をしたい。私の考えは、私のPC上にビルドするときは私のシステムパスからのboostを使い、bambooをビルドするときはlibboost_program_options.libをコピーしました。私はブーストヘッダとlibboost_program_optionsをコピーして、CMAKE_SOURCE_DIR/boostフォルダに入れます。ライブラリは--layout = systemでコンパイルされたので、ファイル名はlibboost_program_options.libです。Cmakeは、明示的に短いものの代わりにフルネームでブーストライブラリを探しています

(...) 
<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> 
(...) 

とリンカ

の呼び出し:私の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の一部のように見えますか

はこれがあります

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

以前にCMAKEによって使用されていたprogram_optionsライブラリ名が取得されている可能性はありますか?それを再使用していますか? – diverscuba23

+0

私はレポをチェックアウトするときに強制的にクリーンビルドを行っているので、次のビルドの前に完全にすべてを削除する必要があります。また、私はそう思わないので、短い名前でlink.exeを実行しています。私はcmake thoに熟練していません –

+0

ファイル 'libboost_program_options.lib'のように見えるのは、何とか' libboost_program_options-vc140-mt-1_64.lib'です。もちろん、最初のファイル名を2番目のファイル名に変換するのはCMakeではありません。 – Tsyvarev

答えて

1

それはブースト窓ヘッダーが.LIBファイルの自動充填のための自動探すいくつかのプラグマを追加すること、それが名前だた理由をブーストを統合するための方法をより良いアイデアを持っています。これがcmakeにライブラリ "libboost_program_options-vc140-mt-1_64.lib"の完全な名前を探す原因となっています。

関連する問題