[英]Double slash in Cmake add_custom_command causes “No rule to make” error
以下內容對我來說不是使用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
這段代碼有些錯誤:
您在add_custom_command
中使用了shell重定向( >
),但是您指定了VERBATIM
標志,該標志不會通過shell處理。
您未將路徑用引號引起來,如果它們包含空格,則會引起問題, set(DIR ...
應該為: set(DIR "${CMAKE_CURRENT_SOURCE_DIR}/")
您正在源代碼樹中創建文件; CMake通常用於源代碼外的構建,因此應在構建樹中創建臨時文件
您可以使用file(WRITE
來創建文件,它比調用shell更快。
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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.