有人能解释为什么我的cmake文件无法构建我的cpp文件吗?

时间:2015-01-31 02:41:34

标签: c++ cmake

所以我已经获得了以下CMakeLists.txt文件来尝试构建我的main.cpp文件。

     project(shell)

     set(extra_flags = -std=c++11 -Werror -Wall -Wextra)
     set(CMAKE_CXX_FLAGS $(CMAKE_CXX_FLAGS) $(extra_flags))
     add_executable(shell main.cpp)

此时,我只是想用Hello World程序构建它,以确保一切正常。但标志是我需要编写的其余程序的标志。调用cmake .的实际过程很好,但是当我使用make时,我收到以下错误:

[100%] Building CXX object CMakeFiles/shell.dir/main.cpp.o
c++: fatal error: no input files
compilation terminated.
/bin/sh: 1: -o: not found 
CMakeFiles/shell.dir/build.make:54: recipe for target 'CMakeFiles/shell.dir/main.cpp.o' failed
make[2]: *** [CMakeFiles/shell.dir/main.cpp.o] Error 127
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/shell.dir/all' failed
make[1]: *** [CMakeFiles/shell.dir/all] Error 2
Makefile:72: recipe for target 'all' failed
make: *** [all] Error 2

我是Ubuntu和命令行的新手,所以非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  • 确保使用大括号$ {}(上面的评论)
  • 如果您想要"重置"请确保删除您的CMakeCache.txt。 (上面的评论)
  • 我还习惯于始终使用set(CMAKE_CXX_FLGAS "${CMAKE_CXX_FLAGS} ${extra_flags}")代替set(CMAKE_CXX_FLGAS ${CMAKE_CXX_FLAGS} ${extra_flags}),这证明在我的任何应用程序中都不会引起头痛。试试这个。
  • 使用make VERBOSE=1查看CMake实际运行的命令。然后你可以直接搞乱这个命令,看看你是如何让它工作的。
  • 如果它只是 HelloWorld!,请尝试省略-std=c+11标志(或任何标志,真的)并查看。