0

使用 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
4

1 回答 1

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不见了

固定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")
于 2012-04-30T12:47:13.980 回答