2012-04-27 13 views
-1

以下は、CMake 2.8.3を使用して私のためにコンパイルしません。 "DIR"変数の末尾にスラッシュが付いた "//"を削除してください。後続のスラッシュが削除されるとコンパイルされます。Cmake add_custom_commandの二重スラッシュは "No rule to make"エラーを発生させます

これはこれが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 
+0

downvoteとノーコメント? – Sam

答えて

0

このコードで間違っていくつかのことがあります。

  1. あなたはシェルのリダイレクトを使用しています(>)をadd_custom_commandに設定しましたが、シェル経由で処理しないVERBATIMフラグを指定しました。あなたは、彼らがスペースを含む場合は、set(DIR ...があるべき問題を引き起こすであろう、引用符であなたのパスを

  2. 囲むされていません。set(DIR "${CMAKE_CURRENT_SOURCE_DIR}/")

  3. あなたがソースツリー内のファイルを作成しています。 CMakeのは、通常、ソースのうちはそう一時ファイルがあなたがたが

  4. cmake_minimum_requiredがあるシェルに呼び出すよりも高速になり、ファイルを作成するためにfile(WRITEを使用することができ

  5. ビルドツリー内に作成する必要があるのビルドで使用されています

固定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") 
関連する問題