0

ライブラリ用の CMakeLists.txt ファイルがあります。それはかなり基本的です:

set(LIB_FILES source/first.cpp)

add_library(first ${LIB_FILES})

最終的にライブラリにソース ファイルを追加する予定なので、ファイルをリストに入れます。問題は、すべてのファイルがsourceディレクトリにあることです。そして、私はそれを常に繰り返さなければならないことを望んでいません。

GLOB新しいファイルを追加するときに CMakeLists.txt ファイルを編集する必要があるため、パターン マッチング ソリューションも使用したくありません。そうすれば、私のビルドはビルド ソリューションを再ビルドし、新しいファイルが正しく表示されます (私が理解しているように、私はまだ CMake を初めて使用します)。

sourceリストを作成するためだけに、ディレクトリ自体にCMakeLists.txt ファイルを追加しようとしましたLIB_FILES。それはうまくいきませんでした。CMake の変数はファイル スコープです。また、( を使用して) スコープを解除した場合でも、PARENT_SCOPE各ファイルにプレフィックスとしてディレクトリを付ける必要がありました。それで何も得られませんでした。

sourceディレクトリにすべてのビルドファイルが生成されるため、実際のライブラリ定義をディレクトリに配置したくありませんsource。そして、私はそれを望んでいません。また、ディレクトリ内またはディレクトリの下にないヘッダーを含める必要がありますsource

私のディレクトリ構造は次のようになります。

libroot (where the project build files should go)
\-source (where the source code is)
\-include (where the headers that the user of the library includes go)

sourceでは、すべてのソース ファイルがディレクトリから取得されることを CMake に伝えるにはどうすればよいのでしょうか。

4

2 に答える 2

3

add_library呼び出しを source/CMakeLists.txt に移動することもできます。

set(LIB_FILES first.cpp)
add_library(first ${LIB_FILES})

次にadd_subdirectory、最上位の CMakeLists.txt で使用します。

add_subdirectory(source)
于 2013-07-30T01:23:28.740 に答える
2

そのために簡単なマクロを使用できます

macro(AddSrc dst_var basepath_var)
    foreach(file ${ARGN})
        list(APPEND ${dst_var} ${basepath_var}/${file})
    endforeach()
endmacro()

set(MY_SRCFILES "")

AddSrc(MY_SRCFILES path/to/source
    foo.cpp
    bar.cpp
    whatever.cpp
)
于 2013-07-30T01:39:56.357 に答える