使用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
答案 0 :(得分:0)
此代码存在一些问题:
您在>
中使用了shell重定向(add_custom_command
),但是您指定了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")