0

以下は、CMake 2.8.3 を使用してコンパイルできません。「DIR」変数の末尾のスラッシュが原因の「//」に注意してください。その末尾のスラッシュが削除された場合、コンパイルされます。

これがCMakeまたはMakeのバグなのか、それとも単なるユーザーエラーなのか、誰にもわかりますか?

ありがとう。

CMakeLists.txt:

    SET(DIR ${CMAKE_CURRENT_SOURCE_DIR}/)
    FILE(MAKE_DIRECTORY ${DIR})

    ADD_CUSTOM_COMMAND(
            OUTPUT ${DIR}/test.cc
            COMMAND echo "int main(void) { }" > ${DIR}/test.cc
            VERBATIM
    )

    ADD_EXECUTABLE(test ${DIR}/test.cc)

コンソール:

-- Configuring done
-- Generating done
-- Build files have been written to: /home/sam/tmp
Scanning dependencies of target test
make[2]: *** No rule to make target `test.cc', needed by `CMakeFiles/test.dir/test.o'.  Stop.
make[1]: *** [CMakeFiles/test.dir/all] Error 2
make: *** [all] Error 2
4

1 に答える 1

0

このコードにはいくつか問題があります。

  1. でシェル リダイレクション ( >)を使用していますが、シェル経由で処理しないフラグをadd_custom_command指定しています。VERBATIM

  2. パスを引用符で囲んでいないため、パスにスペースが含まれていると問題が発生します。次のようにするset(DIR ...必要があります。set(DIR "${CMAKE_CURRENT_SOURCE_DIR}/")

  3. ソース ツリー内にファイルを作成しています。CMake は通常、ソース ビルド以外で使用されるため、ビルド ツリーに一時ファイルを作成する必要があります。

  4. を使用file(WRITEしてファイルを作成できます。これは、シェルを呼び出すよりも高速です

  5. cmake_minimum_required不足している

固定CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

set(DIR "${CMAKE_CURRENT_BINARY_DIR}")

file(MAKE_DIRECTORY "${DIR}")
file(WRITE "${DIR}/test.cc" "int main(void) {}")

add_executable(test "${DIR}/test.cc")
于 2012-04-30T12:47:13.980 に答える