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

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

8
CMakeでCCacheを使用する方法は?
次のことを行います。CCacheがPATHに存在する場合は、コンパイルに「ccache g ++」を使用します。それ以外の場合は、g ++を使用します。私は小さなmy-cmakeスクリプトを書いてみました CC="ccache gcc" CXX="ccache g++" cmake $* しかし、動作していないようです(makeを実行してもccacheは使用されません。CMAKE_VERBOSE_MAKEFILEを使用してこれを確認しました)。 更新: このリンクに従って、スクリプトを次のように変更してみました cmake -D CMAKE_CXX_COMPILER="ccache" -D CMAKE_CXX_COMPILER_ARG1="g++" -D CMAKE_C_COMPILER="ccache" -D CMAKE_C_COMPILER_ARG1="gcc" $* しかし、cmakeは、コンパイラのccache(予想される)の使用でテストが失敗したと不平を言っています。
93 c++  unix  cmake  ccache 

8
CMakeを使用してVisual Studio C ++プロジェクトファイルを生成する
LinuxとWindowsでコンパイルするコードのために、オープンソースのC ++プロジェクトに取り組んでいます。Linux上でCMakeを使用してコードをビルドしています。開発のセットアップと政治的な理由から、WindowsではVisual Studioプロジェクトファイル/エディターを使用する必要があります(たとえば、Code :: Blocksに切り替えることができません)。こちらのように、CMakeを使用してVisual Studioファイルを生成する手順が表示されます。 以前にCMakeを使用してVisual Studioファイルを生成したことがありますか?あなたの経験はどうですか?プロジェクトに新しいファイルを追加したいとします。これのワークフローは何ですか?

10
CMakeはC ++でリンカー言語を判別できません
Visual Studio2010とCygwinの両方を使用してWindows7x64でcmakehello worldプログラムを実行しようとしていますが、どちらも機能しないようです。私のディレクトリ構造は次のとおりです。 HelloWorld -- CMakeLists.txt -- src/ -- -- CMakeLists.txt -- -- main.cpp -- build/ cd build続いて、を実行するcmake ..と、エラーが発生します。 CMake Error: CMake can not determine linker language for target:helloworld CMake Error: Cannot determine link language for target "helloworld". ただし、ファイルシステムとsrc/CMakeLists.txtすべての両方でmain.cppの拡張子をmain.cに変更すると、期待どおりに機能します。これは、Visual Studioコマンドプロンプト(Visual Studio Solution Generator)とCygwinターミナル(Unix Makefiles Generator)の両方から実行される場合です。 このコードが機能しない理由はありますか? CMakeLists.txt PROJECT(HelloWorld C) cmake_minimum_required(VERSION …
90 c++  c  cmake 

5
CMakeの関数とマクロ
CMake2.8.12の公式文書は約macro 呼び出されると、マクロに記録されたコマンドは、最初に仮パラメーター($ {arg1})を渡された引数に置き換えることによって変更され、次に通常のコマンドとして呼び出されます。 とについて function 関数に記録されたコマンドは、呼び出されると、最初に仮パラメーター($ {arg1})を渡された引数に置き換えることによって変更され、次に通常のコマンドとして呼び出されます。 明らかに、2つの引用符はほとんど同じですが、私を混乱させます。マクロのように関数を呼び出すときに、最初にパラメーターを置き換えますか?
89 cmake 

10
CMakeとCTest:make testはテストをビルドしません
make testターゲットを使用してテストの一部を自動的に実行するために、CMakeでCTestを試しています。問題は、CMakeがプロジェクトの一部であるため、実行するテストをビルドする必要があることをCMakeが「理解」しないことです。 だから私はこの依存関係を明示的に指定する方法を探しています。

4
CMakeを使用してCFLAGSおよびCXXFLAGSオプションを設定します
Linuxで実行されているコードをデバッグしたいだけで、デバッグビルド(-O0 -ggdb)が必要です。だから私はこれらのものを私のに追加しましたCMakeLists.txt: set(CMAKE_BUILD_TYPE DEBUG) set(CMAKE_C_FLAGS "-O0 -ggdb") set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb") set(CMAKE_C_FLAGS_RELEASE "-O0 -ggdb") set(CMAKE_CXX_FLAGS "-O0 -ggdb") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb") set(CMAKE_CXX_FLAGS_RELEASE "-O0 -ggdb") コンパイルしようとすると、使用して冗長になりmake VERBOSE=1 、次のような出力を観察しました。 ... /usr/bin/c++ -D_BSD_SOURCE **-O0 -ggdb** -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions -DQT_NO_EXCEPTIONS -fno-check-new -fno-common -Woverloaded-virtual -fno-threadsafe-statics -fvisibility=hidden -fvisibility-inlines-hidden **-g -O2** …
88 cmake  cflags 

12
CmakeがBoostを見つけられない
CMakeを使用してプロジェクトを構成しようとしていますが、指定されたフォルダーにあるにもかかわらず、Boostライブラリが見つかりません。私が指定されているBoost_INCLUDE_DIR、Boost_LIBRARYDIRとBOOST_ROOT、私はまだcmakeのは、ブーストを見つけることができないというエラーを取得します。そのようなエラーの理由は何でしょうか?
87 boost  cmake 

6
`cmake`から` pkg-config`を使用する適切な方法は何ですか?
ネットを見回すと、次のようなコードがたくさん見られます。 include(FindPkgConfig) pkg_search_module(SDL2 REQUIRED sdl2) target_include_directories(app SYSTEM PUBLIC ${SDL2_INCLUDE_DIRS} target_link_libraries(app ${SDL2_LIBRARIES}) ただし、インクルードディレクトリとライブラリのみを使用し、定義、ライブラリパス、およびによって返される可能性のあるその他のフラグを無視するため、これは間違った方法のようpkg-configです。 これを行い、によって返されるすべてのコンパイルフラグとリンクフラグpkg-configがコンパイル済みで使用されるようにする正しい方法は何でしょうappか?そして、これを達成するための単一のコマンド、つまり次のようなものはありtarget_use(app SDL2)ますか? 参照: include() FindPkgConfig
87 cmake  pkg-config 


1
CMakeで一般的なコンパイルフラグを設定するための最新の方法は何ですか?
コンパイラにフラグを取得するためにCMakeによって提供される複数のメカニズムがあります。 CMAKE_<LANG>_FLAGS_<CONFIG> 変数 add_compile_options コマンド set_target_properties コマンド 現代の使用で他よりも好まれる方法はありますか?もしそうなら、なぜですか?また、この方法をMSVCなどの複数の構成システムでどのように使用できますか?
84 cmake 


1
WindowsでCMakeを構成し、コマンドラインからclangを使用して最新のOpenMPサポートを取得する
並列化にOpenMPを使用する小さなテストプロジェクトがあります。私の目標は、OpenMP 4.5以降のサポートを備えたライブラリ(これらのタイプを使用して配布された外部ライブラリへの実際のプロジェクトリンクのため)を生成.dllし.libてライブラリ用にコンパイルし、コマンドラインから実行して、Dockerで実行できるようにすることですテストとチェック(Dockerの部分はこの質問の範囲外です。これは、コマンドラインから機能させる必要がある理由の参考に過ぎません)。私はこのプロジェクトを別のコンパイラーでコンパイルできますが、満足できないものがあります。 MSVC:、mkdir build-msvc次にcmake ..(新しく作成されたフォルダーから)、最後にcmake --build . --config Release。これは問題なくコンパイルできますが、OpenMP 2.0のみをサポートしているため、実際のプロジェクトには適していません。 Intel Parallel Studio:、mkdir build-intel次にcmake .. -T "Intel C++ Compiler 19.0"(新しく作成されたフォルダーから)、最後にcmake --build . --config Release。これはOpenMP 5.0をサポートしていますが、そのライセンスは私にとってかなり高価です。 MinGW x64 g ++:、mkdir build-g++次にcmake .. -G "MinGW Makefiles"(新しく作成されたフォルダーから)、最後にcmake --build .。これはOpenMP 4.5をサポートしていますが、このコンパイラーは.lib(私が知る限り)互換性がなく、すでに述べたように必要です。 私は成功せずにclangを使用しようとしました: MSVCからのCLANG:、mkdir build-clang-msvc次にcmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..(新しく作成されたフォルダーから)、次のエラーで失敗します。 -CXXコンパイラIDは、MSVCに似たコマンドラインを備えたClang 8.0.1です。 -動作するCXXコンパイラを確認します:C:/ Program Files(x86)/ Microsoft …

1
CMake:推移的な依存関係がどこから来ているのかを知る方法は?
自動依存関係伝搬などの最新の機能を使用するように、レガシーCMakeセットアップを書き直している最中です。(つまり、のtarget_include_directories(<target> PUBLIC <dir>)代わりになどを使用しinclude_directories(<dir>)ます。)現在、一連のグローバルディレクトリプロパティを設定することにより、すべてのプロジェクト依存関係情報を手動で処理しています。 私のテストでは、新しいビルドのターゲットが、古いビルドがリンクしないライブラリにリンクするいくつかの例を見つけました。明示的にリンクしているわけではないので、これはターゲットの依存関係から発生していることを知っていますが、どの依存関係を再帰的に調べてCMakeLists.txt、依存関係の階層を見つけるまで依存関係の階層をたどる必要があるかを見つける必要があります。問題のライブラリを取り込むもの。私たちは数十のライブラリーを持っているので、これは簡単なプロセスではありません。 CMakeは、ターゲットごとに、どの依存関係が明示的に追加され、どの依存関係が推移的な依存関係を通じて伝播されたかを確認する方法を提供しますか? --graphviz出力にはこの違いが示されているように見えるため、CMakeは内部的にコンテキストを認識しています。ただし、treeコマンドラインで依存関係情報を表示する-のようなスクリプトを記述し、Graphvizファイルの解析は悪夢とハックの両方のように聞こえます。 私の知る限り、この情報は含まれてcmake-file-apiいません。codemodel/target/dependenciesフィールドは機能するかもしれないと思いましたが、ローカルと推移的な依存関係が混在しています。また、backtrace各依存関係のフィールドは、現在のターゲットのadd_executable/ add_library呼び出しにのみ関連付けられます。
10 cmake 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.