質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.06%

Cmakeで構文エラー(ptex)

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,186

sanasei

score 13

前提・実現したいこと

os:windows7,Visualstudio2013
上記で下記PBRTの開発環境を構築しようとしています
https://github.com/mmp/pbrt-v3/

発生している問題・エラーメッセージ

その過程で必要なライブラリのptexをgithubで持ってきて
https://github.com/wdas/ptex
Cmakeでconfigureを実行したのですが構文エラーで止まってしまいます

Cmake Error at src/etx/CmakeLists.txt:47 (string)
string sub-command REPLACE requires at least four arguments.
Cmake Error at src/etx/CmakeLists.txt:48 (string)
string sub-command REPLACE requires at least four arguments.
Cmake Error at src/etx/CmakeLists.txt:51 (message)
Could not determine the Ptex library version.

該当のソースコード

```CmakeLists.txt
cmake_minimum_required(VERSION 3.8.0)
project(Ptex)

option(PTEX_BUILD_STATIC_LIBS "Enable building Ptex static libraries" ON)
option(PTEX_BUILD_SHARED_LIBS "Enable building Ptex shared libraries" ON)
option(PRMAN_15_COMPATIBLE_PTEX "Enable PRMan 15 compatibility" OFF)

if (DEFINED ENV{CXXFLAGS_STD})
if ($ENV{CXXFLAGS_STD} STREQUAL "c++17")
set(CMAKE_CXX_STANDARD 17)
elseif ($ENV{CXXFLAGS_STD} STREQUAL "c++14")
set(CMAKE_CXX_STANDARD 14)
elseif ($ENV{CXXFLAGS_STD} STREQUAL "c++11")
set(CMAKE_CXX_STANDARD 11)
else ()
set(CMAKE_CXX_STANDARD 98)
endif ()
else ()
set(CMAKE_CXX_STANDARD 98)
endif ()
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_INSTALL_MESSAGE LAZY) # Silence "Up-to-date:" install messages

if (NOT DEFINED PTEX_SHA)

Query git for current commit ID

execute_process(
COMMAND git rev-parse HEAD
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE PTEX_SHA
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif ()

if (NOT DEFINED PTEX_VER)

Get the version string from a "version" file or from git

if (EXISTS "${PROJECT_SOURCE_DIR}/version")
file(STRINGS "${PROJECT_SOURCE_DIR}/version" PTEX_VER)
else ()
execute_process(
COMMAND git describe --first-parent --always HEAD
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE PTEX_VER
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif ()
endif ()

Transform PTEX_VER into PTEX_MAJOR_VERSION and PTEX_MINOR_VERSION

string(REPLACE "v" "" PTEX_VER_STRIPPED ${PTEX_VER})  # strip leading "v"
string(REPLACE "." ";" PTEX_VER_LIST ${PTEX_VER_STRIPPED})
list(LENGTH PTEX_VER_LIST PTEX_VER_LENGTH)
if (${PTEX_VER_LENGTH} LESS 2)
message(FATAL_ERROR "Could not determine the Ptex library version")
endif ()

The version variables are used to generate PtexVersion.h

list(GET PTEX_VER_LIST 0 PTEX_MAJOR_VERSION)
list(GET PTEX_VER_LIST 1 PTEX_MINOR_VERSION)

include(GNUInstallDirs)
include(CTest)
include(FindZLIB)
include(FindThreads)

enable_testing()

if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)

Detect the build type from the $FLAVOR environment variable

Default to optimized Release builds when unspecified.

if ("$ENV{FLAVOR}" MATCHES "debug")
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "type of build" FORCE)
elseif ("$ENV{FLAVOR}" MATCHES "profile")
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "type of build" FORCE)
else ()
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "type of build" FORCE)
endif ()
endif ()

if (NOT WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic")
endif ()

if (MSVC)
add_definitions(

forcing value to bool 'true' or 'false' (performance warning)

/wd4800

conversion from 'double' to 'float', possible loss of data

/wd4244
/D_CRT_SECURE_NO_WARNINGS
)
endif()

if (${PRMAN_15_COMPATIBLE_PTEX})
add_definitions(-DPTEX_NO_LARGE_METADATA_BLOCKS)
endif ()

include_directories(src/ptex)

add_subdirectory(src/ptex)
add_subdirectory(src/utils)
add_subdirectory(src/tests)
add_subdirectory(src/doc)
add_subdirectory(src/build)

試したこと

os:windows10,Visualstudio2015の端末でも同様の内容を行ったが変わらず

補足情報(FW/ツールのバージョンなど)

pbrt v3
Cmake 3.13.3
ptex Latest commit bbd3b40

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

こんにちは。

まず、ソースは、<code>を押して出てくる '''と'''の間において下さい。でないと見づらいです。

さて、「stringコマンドは最低4つのパラメータが必要」というエラーですね。
stringコマンドは2つしかないので、この2つででていると思われます。
最初のstringコマンドの3つのパラメータは定数ですから、最後の${PTEX_VER}が空のためパラメータが3つしかないと判断しているのだろうと思います。

PTEX_VERはその直前で定義される筈ですが、その定義に失敗しているということになります。
その可能性としては、gitコマンドが動作しない環境でCMakeジェネレートしていることが考えられます。
GiHUbから clone ではなくzipで持ってきて解凍した、当該CMakeジェネレートしてるコンソールのPATHに git が通っていない等が考えられます。(PTEX_VER定義のために git コマンドを発行する可能性がありますので。)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/23 16:19

    回答ありがとうございます.
    ソースコードの件もアドバイスありがとうございます.気を付けます.

    >GiHUbから clone ではなくzipで持ってきて解凍
    cloneでもってはきているのですが、cloneのあとメディアに圧縮し、
    別の端末で解凍して使用しているため
    >当該CMakeジェネレートしてるコンソールのPATHに git が通っていない
    という可能性はありそうです
    コンソールのPATHでだめなら、
    gitからCmakeまで同じ端末上でトライしてみます

    キャンセル

  • 2019/01/24 14:15

    結論から言えば下記構文を追加することでこの問題は無理やり解決させました.
    set PTEX_VER v1.3.2
    別の問題が出ていますが、それはもう少し調べてから質問します.

    ただ、正攻法では解決できていないので教えてください
    >当該CMakeジェネレートしてるコンソールのPATHに git が通っていない
    これを解決する方法ですが
    環境変数の「PATH」にgitのインストール先アドレスを追加
    という方法でおっしゃっている内容ができたことになっていますか?

    回答よろしくお願いします

    キャンセル

  • 2019/01/24 16:42

    なっている筈ですよ。そのコンソールで git --version などとしてgitが起動することを確認できれば大丈夫です。
    VC++2017ですが、ptexのコンフィグをやってみました。PTEX_VERのところは通りました。
    他にZLIB等いくつかのライブラリを要求するようで、それらを入れていないので私のところでは生成には通りませんでした。

    キャンセル

  • 2019/01/24 21:20 編集

    >当該CMakeジェネレートしてるコンソールのPATHに git が通っていない
    上記のとおりでした。直接バージョン変数¥を更新しなくてもエラーが解消されました。
    ありがとうございました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る