Skip to content

Instantly share code, notes, and snippets.

@javoren
Last active December 29, 2016 12:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save javoren/3f491141f18c27d73a911b023d938f33 to your computer and use it in GitHub Desktop.
Save javoren/3f491141f18c27d73a911b023d938f33 to your computer and use it in GitHub Desktop.
OpenCV for VisualStudio
# ライブラリ名をもとにVisualStudioのDEBUG/RELEASEで自動的に参照ライブラリが切り替わるようなファイルを生成する
# たとえばこんなの
# #ifdef _DEBUG
# #pragma comment(lib, "opencv_core310d.lib")
# #else
# #pragma comment(lib, "opencv_core310.lib")
# #endif
#
# 実行するにはSet-ExecutionPolicy RemoteSigned でスクリプトを有効化しておくことを忘れずに
$VS2015_WORK = $env:OCV2015_ROOT+"\vs2015\WS\10.0\"
# ターゲットアーキテクチャとビルドによって切り替わるディレクトリ名
$ARCH_LIST = @(
"x64",
"x86",
"ARM"
)
$BUILD_LIST = @(
"Debug",
"Release"
)
# visual studioで定義済みのプラットフォーム識別マクロ
# https://msdn.microsoft.com/ja-jp/library/b0084kay.aspx
$VC_MACROS = @{"x64"="_M_X64"; "x86"="_M_IX86"; "ARM"="_M_ARM"}
# ライブラリファイルを列挙する
function ListupLibrary($OCV_LIBRARY_PATH)
{
if( Test-Path $OCV_LIBRARY_PATH ){
$FILE_LIST = ls $OCV_LIBRARY_PATH -name
$LIB_LIST = $FILE_LIST -match ".lib$"
$LIB_LIST_FULLPATH = $LIB_LIST -replace "^","$OCV_LIBRARY_PATH\"
$LIB_LIST_FULLPATH2 = $LIB_LIST_FULLPATH -replace "\\","\\"
return @($LIB_LIST_FULLPATH2)
}else{
return @()
}
}
# ファイルの内容をいったんクリアしておく
$OUTPUT_FILENAME = "opencv_lib.cpp"
Write-Output "// genereted powershell script from gen_opencl_linkheader.ps1" | Set-Content -Encoding Default $OUTPUT_FILENAME
Write-Output "#include `"pch.h`"" | Add-Content $OUTPUT_FILENAME -Encoding Default
foreach($ARCH in $ARCH_LIST){
foreach($BUILD in $BUILD_LIST){
$DIR_BASE = $VS2015_WORK + $ARCH
$LIB_DIR = $DIR_BASE + "\lib\" + $BUILD
# 全てのアーキテクチャとビルドのライブラリを列挙
$LIB_LIST = ListupLibrary($LIB_DIR)
# debugとreleaseでリンクするライブラリを切り替える
$ARCH_MACRO_NAME = $VC_MACROS[$ARCH]
if($BUILD -eq "Debug"){
Write-Output "#ifdef _DEBUG" | Add-Content $OUTPUT_FILENAME -Encoding Default
}else{
Write-Output "#ifndef _DEBUG" | Add-Content $OUTPUT_FILENAME -Encoding Default
}
# アーキテクチャごとにリンクするライブラリを切り替える
Write-Output "#ifdef $ARCH_MACRO_NAME" | Add-Content $OUTPUT_FILENAME -Encoding Default
# 列挙されたライブラリを取り込むようなソースコードを定義する
foreach($LIB_NAME in $LIB_LIST){
Write-Output "#pragma comment(lib, `"$LIB_NAME`" )" | Add-Content $OUTPUT_FILENAME -Encoding Default
}
Write-Output ("#endif // end ifdef" + $ARCH_MACRO_NAME) | Add-Content $OUTPUT_FILENAME -Encoding Default
Write-Output ("#endif // end ifdef _DEBUG ") | Add-Content $OUTPUT_FILENAME -Encoding Default
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment