背景

ポータブルなライブラリ環境を構築するために、必要なライブラリをまとめたNuGetパッケージの作成を行っています。

C++プロジェクトでNuGetを使ってみようよ!(Vol. 2:パッケージ作成編) - Qiita

参考にした上記サイトの通り、プログラムの実行まで行えましたが、もう少し機能の充実を図りたいと考えています。

質問

追加したい機能を優先度順で列挙すると以下のようになります。

  1. exeがあるフォルダに必要なdllが自動でコピーされる
  2. DebugとReleaseのモードによってリンクするライブラリがあるパスを変える
  3. pragma comment をしなくても.libファイルがリンクできている

これらの機能を追加するには、どのようにパッケージを作成すればよいでしょうか?

取り組んだ内容

2と3については、VisualStudioが生成した.vcxprojファイルを参考にして以下の.targetsファイルを作成しました。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ImportGroup Label="PropertySheets"/>
    <PropertyGroup>
    </PropertyGroup>
    <ItemDefinitionGroup>
        <!-- プロジェクトファイルの「構成プロパティ」→「C++」に該当します。 -->
        <ClCompile>
            <!-- マクロを「HAS_NUGETOPENCV」を定義します。 -->
            <PreprocessorDefinitions>HAS_NUGETOPENCV;%(PreprocessorDefinitions)</PreprocessorDefinitions>
            <!-- 追加のインクルードディレクトリに追加するフォルダーを指定します。 -->
            <AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)../../build/native/include/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        </ClCompile>
        <!-- プロジェクトファイルの「構成プロパティ」→「リンカー」に該当します。 -->
        <Link>
            <!-- 追加のライブラリディレクトリに追加するフォルダーを指定します。 -->
            <AdditionalLibraryDirectories>$(MSBuildThisFileDirectory)../../build/native/lib/;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
        </Link>

        <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
            <Link>
                <AdditionalDependencies>opencv_world400.lib;%(AdditionalDependencies)</AdditionalDependencies>
            </Link>
        </ItemDefinitionGroup>
        <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
            <Link>
                <AdditionalDependencies>opencv_world400d.lib;%(AdditionalDependencies)</AdditionalDependencies>
            </Link>
        </ItemDefinitionGroup>
    </ItemDefinitionGroup>
</Project>

しかし、コンパイル時にリンクエラーが発生してしまい、.libファイルのリンクが適切にできませんでした。

現状

パッケージフォルダ構成

.nuspec .props .targets ファイルは参考サイトのパスに保存しています。

OpencvNuget
└─build
    └─native
        ├─include
        │  └─opencv2
        └─lib
           ├─opencv_world400.lib
           └─opencv_world400d.lib

パッケージの構成ファイル

OpencvNuget.nuspec

<?xml version="1.0"?>
<package >
  <metadata>
    <id>OpencvNuget</id>
    <version>1.0.1</version>
    <authors>name</authors>
    <owners>name</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Opencv Sample</description>
    <releaseNotes>first commit</releaseNotes>
    <copyright>Copyright 2019</copyright>
    <tags>c++ NuGetTest</tags>
  </metadata>
</package>

propsファイルは参考サイトと同一であるため割愛します。