1

次の CMakeLists.txt と任意の hello.c があるとします。

cmake_minimum_required(VERSION 2.6)

get_filename_component(debug_rpath ${CMAKE_CURRENT_BINARY_DIR}/hello-debug.exe REALPATH)
message(STATUS "debug exe: ${debug_rpath}")
get_filename_component(release_rpath ${CMAKE_CURRENT_BINARY_DIR}/hello-release.exe REALPATH)
message(STATUS "release exe: ${release_rpath}")

add_custom_command(
  OUTPUT hello-release.exe
  COMMAND clang ${CMAKE_SOURCE_DIR}/hello.c -O3 -o ${release_rpath}
  MAIN_DEPENDENCY hello.c
#  DEPENDS hello.c
  IMPLICIT_DEPENDS hello.c
  COMMENT "Compiling release..."
  VERBATIM)

add_custom_command(
  OUTPUT ${debug_rpath}
  COMMAND clang ${CMAKE_SOURCE_DIR}/hello.c -g -DNDEBUG -o ${debug_rpath}
  MAIN_DEPENDENCY hello.c
#  DEPENDS hello.c
  IMPLICIT_DEPENDS hello.c
  COMMENT "Compiling debug..."
  VERBATIM)


add_custom_target(hello-release ALL
  DEPENDS ${release_rpath}
  SOURCES hello.c
  VERBATIM)


add_custom_target(hello-debug ALL
  DEPENDS ${debug_rpath}
  SOURCES hello.c
  VERBATIM)

(コンパイラとしてのデバッグ/リリースとclangは例です。cmakeにはそのための独自のメカニズムがあることを知っています。重要な詳細は、同じメイン入力ファイルを使用する2つのカスタムコマンドがあることです)

hello-debugターゲット出力の実行:

> mingw32-make hello-debug
[ 50%] Compiling release...
[100%] Compiling debug...
[100%] Built target hello-debug

なぜリリースもビルドするのですか?

SOURCESまたはオプションのコメントを外すMAIN_DEPENDENCYと、選択したターゲットだけがビルドされます。2 つのオプションが Visual Studio プロジェクトの生成にのみ影響するようなドキュメントを理解しています。「MinGW Makefiles」と「Visual Studio」ジェネレーターを同時に使用するため、SOURCES オプションを維持すると実際には便利です。バグまたは私は何かを監督していますか?

4

0 に答える 0