0

さまざまなプラットフォーム (win32、SunOS など) とさまざまなコンパイラの構成、コンパイル、distrib の作成を実行する CMake のカスタム ラッパーがあります。必要なすべてのランタイム ライブラリ (libgcc_s.so、libstdc++.so (OS のような *nix 用)。msvcr90.dll、win32 用の msvcp100.dll) をディストリビューションに入れる必要があります。たとえば、gcc には、これらのライブラリの完全な名前を取得できるメカニズムがあります。

# get location of libgcc_s of default compiler
bash-3.2$ g++ -print-file-name=libgcc_s.so
/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/../../../libgcc_s.so

# get location of libstdc++ of custom compiler
bash-3.2$ g++-4.5.3 -print-file-name=libstdc++.so
/u/gccbuild/installed/gcc-4.5.3/lib/gcc/sparc-sun-solaris2.10/4.5.3/../../../libstdc++.so

したがって、msvc (2008、2010) にも同様のメカニズムが必要ですが、これは可能ですか? (指定されたコンパイラの環境変数、レジストリ値、または他のものにすることができます)。または、そのような情報を取得するための CMake メカニズムがあるかもしれません。

4

1 に答える 1

4

InstallRequiredSystemLibraries cmake-moduleを使用できます。msvc dll (およびマニフェスト) を cmake-install ターゲットに追加する CMake の場合。

別の方法として、インストールされている Visual Studio のバージョンのレジストリをチェックし、vcredist を見つける独自の小さな cmake コードを作成することもできます。次に、vcredist パッケージを独自のディストリビューションに追加し、独自のインストーラーでそのインストールを「スリップストリーム」することができます。

たとえば、次のようにすると、vcredist_2010 が検索され、NSIS インストーラーに追加されます。

if(CMAKE_CL_64)
     set(CMAKE_MSVC_ARCH amd64)
   else(CMAKE_CL_64)
     set(CMAKE_MSVC_ARCH x86)
endif(CMAKE_CL_64)

# Try and find the vcredist_XX.exe, normally this is in the WindowsSDK folder.
if( MSVC10 )
    find_program(MSVC_REDIST NAMES VC/vcredist_${CMAKE_MSVC_ARCH}.exe
        PATHS
        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1;InstallationFolder]/Redist/"               
        )
        get_filename_component(vcredist_name "${MSVC_REDIST}" NAME)
endif( MSVC10 )

# If we found a vcredist-package, we add it simply to the 
# installation-folder and run it with NSis.
if( vcredist_name )
    message( STATUS "    Adding " ${vcredist_name} " to Install" )
    install(PROGRAMS ${MSVC_REDIST} COMPONENT System DESTINATION bin)
    # Add /q to make the vcredist install silent
    set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\bin\\\\${vcredist_name}\\\" /q'" )
endif( vcredist_name )
于 2012-11-27T07:52:00.973 に答える