2017-09-25 8 views
0

ファイル/home/me/.config/Kitware/CMakeCache.txtには、どこからでも使いたい初期キャッシュ設定が含まれています。私はcmake -C /home/me/.config/Kitware/CMakeCache.txtを実行し、それが私にこのファイルを使用して3行目のパースエラーを与える:なぜこのcmake初期キャッシュファイルは、このような奇妙なエラーを引き起こしますか?

set(CMAKE_CXX_FLAGS "-march=native -mtune=native" CACHE STRING "Flags used by the compiler during all build types.") 

set(CMAKE_CXX_FLAGS_DEBUG "-Og -ggdb" CACHE STRING "Flags used by the compiler during debug builds.") 

これは私が取得エラーです:私は(=を追加する)ラインを変更した場合、

CMake Error: Parse error in cache file /home/me/.config/Kitware/CMakeCache.txt on line 3. Offending entry: set(CMAKE_CXX_FLAGS_DEBUG "-Og -ggdb" CACHE STRING "Flags used by the compiler during debug builds.") 

だけに:

set(CMAKE_CXX_FLAGS_DEBUG "=-Og -ggdb" CACHE STRING "Flags used by the compiler during debug builds.") 

それが正常に動作しますが、その後、私のプロジェクトでの結果のキャッシュファイルが=-Og -ggdbに設定オプションがあります。実際、=記号は、set文全体のどこにでも表示できます。しかし、どこに置いても違う問題が発生します。

私はCMakeCache.txt以外/home/me/.config/Kitware/default.cmake(または他の何かにファイル名を変更した場合、それはまた、正常に動作し、すべてのオプションの値で=記号を必要としません。

これは非常に奇妙な行動である、と私はドン」 tはそれを理解し、ここで何が起こっている

+0

行がよく見えます。私はそれが明らかだが、あなたはエンコードせずに初期キャッシュファイルを保存しようとしましたか?時には '--'は実際にはマイナス記号ではない(ブラウザからコピーされたとき)。 – Florian

+0

@Florian - まあ、私はemacsを使っていました。そしてその行はブラウザからコピーされませんでした。私は手でそれをタイプした。そして、それは私が別の名前をつけたときに全く同じファイルがなぜ働いたのかを説明していません。しかし、私は現在の 'defaults.cmake'ファイルを' CMakeCache.txt'にもう一度コピーし、同じエラーが出るかどうか確認します。 – Omnifarious

+0

ああ、私はそれを逃した。あなたのメインの 'CMakeLists.txt'ファイルは同じディレクトリにありますか?次に、 'CMakeCache.txt'ファイルがあなたの実際のキャッシュファイルとして読み込まれ、エラーはやや理解できます([here](https://stackoverflow.com/questions/30503631/cmake-in-which-order-are- files-parsed-cache-toolchain)を参照してください)。 – Florian

答えて

1

答えに私のコメントを回す

cmake.cxxください:。?名前を持つコマンドラインで何かをcmakelists.txtまたはcmakecache.txtはそれらのファイルへのパスとみなされます。

ここでCMakeは-Cオプションを無視し、CMakeCache.txtを実際の変数キャッシュファイルとして読み込もうとします。これらのファイルのフォーマット/構文はNAME:TYPE=VALUEです。

この動作はCMakeのバグと考えることができます。または、最初のキャッシュファイル名にCMakeCache.txtを使用しないでください。

関連する問題