コンテンツにスキップ

cmakeを調べる

cmakeを使ってUSDのモジュールを単体でビルドする

CMAKE_MODULE_PATHの指定

find_packages を使用するために、 CMAKE_MODULE_PATH で Find###.cmake という モジュールモード用の cmakeファイルを置く場所を指定する。

1
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")

そのうえで、指定の cmakeフォルダに FindUSD.cmake を入れておくと、

1
find_package(USD REQUIRED)

find_package で、 FindUSD.cmakeを呼び出す。

PythonLibs

find_packagesで PythonLibsを探すときに何もしないとうまくいかない

1
2
set(PYTHON_LIBRARY "C:/Users/remir/AppData/Local/Programs/Python/Python39/libs")
set(PYTHON_INCLUDE "C:/Users/remir/AppData/Local/Programs/Python/Python39/include")

ので、PYTHON_LIBRARY と PYTHON_INCLUDEを指定しておく

デバッグする

https://qiita.com/Hiroya_W/items/049bfb4c6ad3dfe6ff0c#cmake%E3%81%8C%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%A4%89%E6%95%B0%E3%81%AE%E5%80%A4%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B

1
cmake .. --trace

環境変数を指定する

1
2
# 環境変数を指定する
set($ENV{USD_INSTALL_ROOT} "C:/USD")

ビルド実行

1
2
cmake ..
cmake --build . --config Release

/Zc コンパイラオプション

https://learn.microsoft.com/ja-jp/cpp/build/reference/zc-conformance?view=msvc-170

**/Zc** コンパイラ オプションを使用すると、標準または Microsoft 固有のコンパイラの動作を指定できます。

cmakeでコンパイラオプションを指定する場合は

1
set(CMAKE_CXX_FLAGS "/Zc:inline- ${CMAKE_CXX_FLAGS}")

CMAKE_CXX_FLAGS にセットする。

USDのcmakeにあるmsvcdefaults に、Windows向けのコンパイラオプションを確認できる。

-D定義フラグ

https://runebook.dev/ja/docs/cmake/command/add_definitions

1
add_definitions(-DTEST="HOGEHGOE")

-Dオプションを指定すると、プリプロセッサシンボルを定義する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <stdio.h>

void main()
{

#ifdef TEST
    printf_s("TEST defined %s\n", TEST);
#else
    printf_s("TEST not defined\n");
#endif
}

このシンボルを #if または #ifdef と一緒に使用すると、ソース コードを条件付きでコンパイルできます。

https://learn.microsoft.com/ja-jp/cpp/build/reference/d-preprocessor-definitions?view=msvc-170

configure_file

https://qiita.com/osamu0329/items/edc66e2e1b6c96947771

テンプレートファイルをもとにファイルを出力できます

1
2
3
configure_file(<input> <output>
               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
               [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])

plugInfo.jsonの

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
    "Plugins": [
        {
            "Info": {
                "Types": {
                    "MyProceduralMeshPlugin": {
                        "bases": ["HdGpGenerativeProceduralPlugin"],
                        "displayName": "MyProceduralMesh",
                        "priority": 0
                    },
                    "MyProceduralFurPlugin": {
                        "bases": ["HdGpGenerativeProceduralPlugin"],
                        "displayName": "MyProceduralFur",
                        "priority": 0
                    }
                }
            },
            "LibraryPath": "../@PLUGIN_NAME@.dll",
            "Name": "@PLUGIN_NAME@",
            "ResourcePath": "resources",
            "Root": "@PLUG_INFO_ROOT@",
            "Type": "library"
        }
    ]
}

@~~~@ のように書かれている部分を、ビルド時に置換する。

1
2
3
configure_file("${PROJECT_SOURCE_DIR}/plugInfo.json"
               "${PROJECT_BINARY_DIR}/plugInfo.json"
               @ONLY)

PROJECT_SOURCE_DIR が CMakeFiles.txt があるフォルダ
PROJECT_BINARY_DIRが buildフォルダ

1
2
3
4
5
6
install(
    FILES
    ${PROJECT_BINARY_DIR}/plugInfo.json
    DESTINATION
      ./${PLUGIN_NAME}/resources
)

置換したファイルを、指定の場所にインストールすれば
plugInfo.json を書き換えつつ運用できる。