簡體   English   中英

Cmake中的雙斜杠add_custom_command導致“無規則”錯誤

[英]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

這段代碼有些錯誤:

  1. 您在add_custom_command中使用了shell重定向( > ),但是您指定了VERBATIM標志,該標志不會通過shell處理。

  2. 您未將路徑用引號引起來,如果它們包含空格,則會引起問題, set(DIR ...應該為: set(DIR "${CMAKE_CURRENT_SOURCE_DIR}/")

  3. 您正在源代碼樹中創建文件; CMake通常用於源代碼外的構建,因此應在構建樹中創建臨時文件

  4. 您可以使用file(WRITE來創建文件,它比調用shell更快。

  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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM