タグ付けされた質問 「cmake」

CMakeは、クロスプラットフォームのオープンソースビルドシステムジェネレーターです。いくつかの統合開発環境用のネイティブmakefile、忍者ビルド、プロジェクトファイルなどのビルドシステム用のファイルを生成します。

4
とにかくCMAKE_MODULE_PATHを指定する必要がある場合、find_package()はどのように使用しますか?
CMakeを使用して、クロスプラットフォームのビルドシステムを動作させようとしています。現在、ソフトウェアにはいくつかの依存関係があります。自分でコンパイルして、システムにインストールしました。 インストールされたいくつかのサンプルファイル: -- Installing: /usr/local/share/SomeLib/SomeDir/somefile -- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile -- Installing: /usr/local/lib/SomeLib/somesharedlibrary -- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake -- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake CMakeは、ファイルfind_package()を開きFind*.cmake、システム上のライブラリを検索して、いくつかの変数を定義するを持っていますSomeLib_FOUND。 私のCMakeLists.txtには次のようなものが含まれています。 set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}") find_package(SomeLib REQUIRED) 最初のコマンドは、CMakeがの後に検索する場所を定義し、が見つかる場所のFind*.cmakeディレクトリを追加したので、期待どおりに機能します。SomeLibFindSomeLib.cmakefind_package() しかし、find_package()存在する理由の1つは、非クロスプラットフォームのハードコードされたパスから離れることです。 これは通常どのように行われますか?のcmake/ディレクトリをSomeLibプロジェクトにコピーして、CMAKE_MODULE_PATH相対的に設定する必要がありますか?
167 cmake 

4
CMakeを使用して、フォルダー内のすべてのファイルをターゲットに自動的に追加しますか?
クロスプラットフォームプロジェクトをVisual C ++、XCode、makefileの個別のビルド管理システムからCMakeに切り替えることを検討しています。 私が必要とする重要な機能の1つは、ディレクトリ内のすべてのファイルをターゲットに自動的に追加することです。これはmakeで簡単に実行できますが、Visual C ++やXCodeでは簡単に実行できません(間違っている場合は修正してください)。CMakeで直接行うことはできますか?どうやって?

3
CMakeはどのように機能しますか?
私はこれを自分のためだけに求めているのではありません。この質問が私のような多くの初心者のための参照になることを願っています。このような小さなCMakeLists.txtファイルの 場合、舞台裏で何が起こっているのかについて完全に困惑していることがわかりました cmake_minimum_required (VERSION 2.6) project(Tutorial) add_executable(Tutorial tutorial.cpp) そしてそのような小さな tutorial.cpp int main() { return 0; } 非常に多くのファイルが生成されています CMakeCache.txt cmake_install.cmake Makefile CMakeLists.txt tutorial.cpp そして、CMakeFiles非常に多くのファイルとフォルダを含むフォルダ CMakeCCompiler.cmake CMakeOutput.log Makefile.cmake cmake.check_cache CMakeSystem.cmake progress.marks CMakeCXXCompiler.cmake CMakeTmp TargetDirectories.txt CMakeDetermineCompilerABI_C.bin CompilerIdC Tutorial.dir CMakeDetermineCompilerABI_CXX.bin CompilerIdCXX CMakeDirectoryInformation.cmake Makefile2 背後で何が起こっているのか(つまり、なぜファイルを生成する必要があるのか​​、その目的は何か)を理解していないことが、CMakeを学ぶ上での最大の障害でした。 だれかが知っているなら、後世のために説明していただけませんか。これらのファイルの目的は何ですか。「」と入力cmake .すると、プロジェクトをビルドする前にcmakeが正確に構成および生成されます。
158 cmake 

5
ソースファイルをGLOBで指定するか、CMakeで各ファイルを個別に指定する方が良いですか?
CMakeは、ターゲットのソースファイルを指定するいくつかの方法を提供します。1つは、グロビング(documentation)を使用することです。次に例を示します。 FILE(GLOB MY_SRCS dir/*) 別の方法は、各ファイルを個別に指定することです。 どちらの方法が好ましいですか?グロビングは簡単に思えますが、いくつかの欠点があると聞きました。
157 cmake 

4
CMakeでは、コンパイラがClangかどうかをどのようにテストできますか?
一連のクロスプラットフォームCMakeビルドスクリプトがあり、Visual C ++およびGCCでのビルドをサポートしています。 Clangを試していますが、CMakeスクリプトでコンパイラがClangであるかどうかをテストする方法がわかりません。 コンパイラがClangかどうかを確認するには何をテストすればよいですか?現在Visual C ++とGCC を使用MSVCしCMAKE_COMPILER_IS_GNU<LANG>てテストしています。
151 c++  c  cmake  clang 



4
cmakeで共有ライブラリを作成する方法は?
自分で作成したMakefileを使用してコンパイルするために使用するライブラリを作成しましたが、今度はcmakeに切り替えます。ツリーは次のようになります(関係のないファイルをすべて削除しました)。 . ├── include │ ├── animation.h │ ├── buffers.h │ ├── ... │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp ├── ... ├── vertex.cpp └── world.cpp だから私がやろうとしていることは、ソースを共有ライブラリにコンパイルし、それをヘッダーファイルと一緒にインストールすることです。 私が見つけたほとんどの例は、いくつかの共有ライブラリを使用して実行可能ファイルをコンパイルしますが、単純な共有ライブラリだけではありません。cmakeを使用する非常に単純なライブラリーを誰かに教えてもらえれば、これも例として使用できるので参考になります。

2
CMake:単体テストを含むプロジェクト構造
プロダクションソース(srcサブフォルダー内)とテスト(サブフォルダー内)を含めるようにプロジェクトを構成しようとしていtestます。これを構築するためにCMakeを使用しています。最小限の例として、以下のファイルを用意しています。 CMakeLists.txt: cmake_minimum_required (VERSION 2.8) project (TEST) add_subdirectory (src) add_subdirectory (test) src / CMakeLists.txt: add_executable (demo main.cpp sqr.cpp) src / sqr.h #ifndef SQR_H #define SQR_H double sqr(double); #endif // SQR_H src / sqr.cpp #include "sqr.h" double sqr(double x) { return x*x; } src / main.cpp-sqrを使用しますが、問題にはなりません test / CMakeLists.txt: find_package(Boost COMPONENTS …

1
CMAKEにエラーを生成させる
特定の条件でCMAKEにエラーを生成させるにはどうすればよいですか。つまり、次のようなものが必要です。 if( SOME_COND ) error( "You can't do that" ) endif()
136 cmake 

3
CMakeのinclude_directoriesとtarget_include_directoriesの違いは何ですか?
私のC ++コードのディレクトリ構造は次のようになります。 | |->include |->src 私のコードのCMakeLists.txtファイルを書いています。違いを理解したいinclude_directoriesとtarget_include_directories中をCMake。 それらの使用法と、使用するインクルードファイルパスを追加するための違いは何ですか?
134 c++  cmake 

6
gcc / cmakeを使用して64ビットLinuxマシンで32ビットバイナリをコンパイルする方法
32ビットでプロジェクトをコンパイルすることは可能ですかとcmakeし、gcc上の64ビット・システム?おそらくそうですが、どうすればよいですか? パラメータ/フラグなどを設定せずに「無知」な方法で試したところ、LD_LIBRARY_PATHリンクされたライブラリを見つけるように設定しただけ~/tools/libでは無視され、名前の付いたサブディレクトリのみが表示されます。 lib64ます。
129 linux  gcc  64-bit  cmake  32-bit 

4
CMake外部ライブラリへのリンク
CMakeに、同じCMakeプロジェクト内でビルドされていない外部共有ライブラリに実行可能ファイルをリンクさせる方法は? 行うだけでtarget_link_libraries(GLBall ${CMAKE_BINARY_DIR}/res/mylib.so)エラーが発生します make[2]: *** No rule to make target `res/mylib.so', needed by `GLBall'. Stop. make[1]: *** [CMakeFiles/GLBall.dir/all] Error 2 make: *** [all] Error 2 (GLBall is the executable) ライブラリをバイナリdirにコピーした後bin/res。 使ってみた find_library(RESULT mylib.so PATHS ${CMAKE_BINARY_DIR}/res) これはで失敗しRESULT-NOTFOUNDます。
126 cmake 

10
GTestとCMakeの使用を開始する方法
私は最近、C ++プロジェクトをコンパイルするためにCMakeを使用することで売却されました。今、私のコードのいくつかの単体テストを書き始めたいと思います。私はこれを支援するためにGoogle Testユーティリティを使用することを決定しましたが、開始するにはいくつかの助けが必要です。 一日中、さまざまなガイドや例を読んでいます。入門書、IBMの紹介、 SOに関するいくつかの質問(こことここ)や、他の情報源を忘れてしまいました。まだまだたくさんあると思いますが、どういうわけかまだ問題があります。 私は現在、最も基本的なテストを実装しようとしています。これは、gtestが正しくコンパイル/インストールされ、機能していないことを確認するためです。唯一のソースファイル(testgtest.cpp)は、前の回答からほぼ正確に取得されます。 #include <iostream> #include "gtest/gtest.h" TEST(sample_test_case, sample_test) { EXPECT_EQ(1, 1); } 関連付けられているCMakeLists.txtは次のとおりです。 cmake_minimum_required(VERSION 2.6) project(basic_test) # Setup testing enable_testing() find_package(GTest REQUIRED) include_directories(${GTEST_INCLUDE_DIR}) # Add test cpp file add_executable(runUnitTests testgtest.cpp ) # Link test executable against gtest & gtest_main target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG}) add_test( NAME runUnitTests COMMAND …

4
C ++プロジェクト構成(gtest、cmake、doxygenを使用)
私はプログラミング全般に慣れていないので、C ++で単純なベクトルクラスを作成することから始めることにしました。ただし、後でワークフローを変更するのではなく、最初から良い習慣を身に付けたいと思います。 現在、ファイルは2つvector3.hppとしかありませんvector3.cpp。このプロジェクトは、私がすべてに慣れるにつれてゆっくりと成長し始め(一般的な線形代数ライブラリーのようになります)、後で人生を楽にするために「標準」プロジェクトレイアウトを採用したいと思います。だから周りを見回した後、私はhppとcppファイルを整理しようとする2つの方法を見つけました、最初のものは: project └── src ├── vector3.hpp └── vector3.cpp そして二番目の存在: project ├── inc │ └── project │ └── vector3.hpp └── src └── vector3.cpp あなたはどちらを勧めますか、そしてその理由は? 次に、コードの単体テストにGoogle C ++ Testing Frameworkを使用したいと思います。かなり使いやすいようです。あなたは、例えば、私のコードでこれをバンドル示唆くださいinc/gtestまたはcontrib/gtestフォルダ?バンドルされている場合、fuse_gtest_files.pyスクリプトを使用して数やファイルを減らすか、そのままにしておくことをお勧めしますか?バンドルされていない場合、この依存関係はどのように処理されますか? テストを書くことになると、これらは一般的にどのように編成されますか?各クラス(test_vector3.cppたとえば)ごとに1つのcppファイルを作成することを考えていましたが、すべてを簡単に一緒に実行できるようにすべて1つのバイナリにコンパイルしましたか? gtestライブラリは一般にcmakeとmakeを使用してビルドされるので、私のプロジェクトもこのようにビルドするのは理にかなっていると思いましたか?次のプロジェクトレイアウトを使用することにした場合: ├── CMakeLists.txt ├── contrib │ └── gtest │ ├── gtest-all.cc │ └── gtest.h ├── docs │ └── Doxyfile …
123 c++  cmake  doxygen  googletest 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.