5

MPCから CMakeに移行しています。いくつかのサンプルを含む lib を提供しています。サンプルにはメイクファイルが付属しています。

問題は、cmake によって生成されたメイクファイルに絶対パスが含まれているが、相対パスが含まれていないことです。

# The main all target
all: cmake_check_build_system
    cd /.../Projects/cpp_trunk && $(CMAKE_COMMAND) -E cmake_progress_start /.../Projects/cpp_trunk/CMakeFiles /.../Projects/cpp_trunk/samples/CMakeFiles/progress.make
    cd /.../Projects/cpp_trunk && $(MAKE) -f CMakeFiles/Makefile2 samples/all
    $(CMAKE_COMMAND) -E cmake_progress_start /.../cpp_trunk/CMakeFiles 0

そのため、コピーすると壊れてしまいます。それを回避する方法はありますか?

UPD: FAQを読みましたが、私の質問はまだ行われています。

4

3 に答える 3

2

CMake によって作成されたメイクファイルは、ソース コード ベースの一部ではありません。CMake への入力として使用する CMakeLists.txt ファイル、ソース コード ベースの一部です。ソース コードを別の場所にコピーしてビルドする場合は、ソース コードからビルドします。つまり、CMake を再実行します。(そして、それがあなたの回避策です。)

私は 1 つのプロジェクトで 10 年以上 CMake を使い続けています。私のチームが学んだ便利なトリックの 1 つは、ソース コード ベースの残りの部分の同じコピーをすべて共有する 1 つの開発ホストで、ソース コード ベースの一部の複数のコピーを持つことができるということです。相対パスでそれをやってみてください!新しいビルド ディレクトリでソース コードをビルドするたびに、CMake はすべてのソース ファイルへの正しいパスを見つけ出すという事実に依存しています。これらのパスは、新しいビルド ディレクトリに対して、以前のビルドと同じである必要はありません .

于 2014-06-25T21:59:53.760 に答える
0

cmake によって生成されるビルド ファイル (makefile、ninja ファイルなど) には、ハードコードされたパスやその他の移植できないものが含まれます。それで大丈夫です。これらは、ビルド プロセスの一部である一時ファイルとして扱います。CMakeLists.txt ファイルのみをバージョン管理し、チェックアウト時に他のマシンまたは他のディレクトリに新しいメイクファイル (または何でも) を生成します。1 人が makefile を使用し、1 人が eclipse + ninja を使用するなど、すべて cmake によって生成された、さまざまなビルド ファイルを使用するチーム内のさまざまな人を配置することもできます。

于 2014-06-25T21:38:01.263 に答える