Cmake add_custom_command中的双斜杠导致“无规则”错误

时间:2012-04-27 16:07:11

标签: makefile cmake

使用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 个答案:

答案 0 :(得分:0)

此代码存在一些问题:

  1. 您在>中使用了shell重定向(add_custom_command),但是您指定了VERBATIM标记,该标记不通过shell进行处理。

  2. 您没有在引号中包含您的路径,如果它们包含空格会导致问题,set(DIR ...应该是:set(DIR "${CMAKE_CURRENT_SOURCE_DIR}/")

  3. 您正在源树中创建文件; CMake通常与源代码构建一起使用,因此应在构建树中创建临时文件

  4. 您可以使用file(WRITE创建文件,这比调用shell更快

  5. cmake_minimum_required缺失

  6. 已修复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")