30

の実行時にインクルードディレクトリを指定することはできますかcmake?例えば

cmake . -INCLUDE=/foo/bar

ヘッダーファイルは、コンパイルしたいソースとは別のディレクトリにあります。Makefileによって生成されたものをいじくり回すことなく、これを修正したいと思いcmakeます。

アップデート

プロジェクトにはがありCMakeLists.txtます。抜粋:

INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/ga)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/utils)

${EO_SOURCE_DIR}コマンドラインから設定できますか?

4

2 に答える 2

11

ヘッダーへのパスがソースに関連して固定されている場合は、コマンドラインを介してこの情報を渡す必要がないはずです。

プロジェクトのディレクトリ構造は次のとおりです。

/CMakeLists.txt
/my_sources/main.cpp
/my_sources/foo.cpp
/my_includes/foo.hpp

また、CMakeLists.txtには、現在次のようなものがあります。

add_executable(MyExe my_sources/main.cpp my_sources/foo.cpp)

次に、/my_includesフォルダをインクルード検索パスのリストに追加するには、次のものを追加するだけです。

include_directories(my_includes)


の詳細についてinclude_directoriesは、を実行してください

cmake --help-command include_directories

問題の更新への回答:

はい、-Dコマンドラインオプションを使用するだけです

cmake . -DEO_SOURCE_DIR:PATH=<Path to required dir>

この結果、変数${EO_SOURCE_DIR}がキャッシュされるため、この-D引数が必要になるのは1回だけです(必要なパスが変更されたり、CMakeCacheファイルを削除したりしない限り)。

于 2012-10-20T10:01:31.600 に答える
9

これを行う適切な方法は、CMakeLists.txtで変数を定義し、ユーザーにそれを設定するように依頼することです。

set(YOURLIB_INCLUDE_DIR "" CACHE FILEPATH "Path to yourlib includes")

if(NOT EXISTS ${YOURLIB_INCLUDE_DIR}/header.h)
  message(SEND_ERROR "Can't find header.h in ${YOURLIB_INCLUDE_DIR})
endif()

include_directories(${YOURLIB_INCLUDE_DIR})

これで、コマンドラインから設定できます。cmake -D YOURLIB_INCLUDE_DIR=/path/to/yourlib/include .

于 2012-10-20T08:19:33.407 に答える