Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
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