次の 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 オプションを維持すると実際には便利です。バグまたは私は何かを監督していますか?