2012-04-27 69 views
-1

以下不適用於我使用CMake 2.8.3。請注意由「DIR」變量的尾部斜線引起的「//」。如果刪除了尾部斜線,它會進行編譯。Cmake add_custom_command中的雙斜槓導致「無規則製作」錯誤

任何人都知道這是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 2012-04-27 16:24:01

回答

0

有幾件事情錯這個代碼:

  1. 您正在使用shell重定向(>)在add_custom_command中,但是您已指定不通過shell處理的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")