【问题标题】:CMake clang and c++0xCMake Clang和C ++ 0x
【发布时间】:2012-01-20 08:51:26
【问题描述】:

使用 clang++ 时,如何让 CMake 在编译时使用 -std=c++0x 标志,但在链接时不使用?

还有其他几篇关于使用 clang 作为编译器的帖子,但我没有找到任何关于设置 c++ 标准的提示。

这是我尝试过的:

CMakeLists.txt:

project(test)
add_executable(main main.cxx)

ClangOverride.txt:

SET (CMAKE_C_FLAGS_INIT                "-Wall -std=c99")
SET (CMAKE_C_FLAGS_DEBUG_INIT          "-g")
SET (CMAKE_C_FLAGS_MINSIZEREL_INIT     "-Os -DNDEBUG")
SET (CMAKE_C_FLAGS_RELEASE_INIT        "-O3 -DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g")

SET (CMAKE_CXX_FLAGS_INIT                "-Wall -std=c++0x -stdlib=libc++")
SET (CMAKE_CXX_FLAGS_DEBUG_INIT          "-g")
SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT     "-Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE_INIT        "-O3 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g")
SET (CMAKE_EXE_LINKER_FLAGS_INIT         "")

main.cxx:

int main(){ return 0; }

用于调用cmake的命令

CC=clang CXX=clang++ cmake .. -DCMAKE_USER_MAKE_RULES_OVERRIDE=ClangOverride.txt -DCMAKE_BUILD_TYPE=Release

构建项目:

VERBOSE=1 make

这将调用以下两个命令:

/usr/bin/clang++    -Wall -std=c++0x -stdlib=libc++ -O3 -DNDEBUG   -o CMakeFiles/main.dir/main.cxx.o -c /tmp/asdf/main.cxx
/usr/bin/clang++    -Wall -std=c++0x -stdlib=libc++ -O3 -DNDEBUG    CMakeFiles/main.dir/main.cxx.o  -o main -rdynamic

第二个命令会导致警告,因为如果未使用标志:-std=c++0x

clang: warning: argument unused during compilation: '-std=c++0x'
CMakeFiles/main.dir/main.cxx.o: file not recognized: File format not recognized
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我怎样才能避免这种情况?

【问题讨论】:

  • 嗯,AFAIK,CMake 不应该使用编译器驱动程序来链接目标文件。 CMAKE_USER_MAKE_RULES_OVERRIDE 是什么东西?

标签: c++ c++11 cmake


【解决方案1】:

使用 ADD_DEFINITIONS("-std=c++0x") 而不是设置 CXX 标志。

【讨论】:

  • 如果你不希望这个选项出现在 C 目标中,你必须在 CMAKE_CXX_FLAGS 中设置它。
  • 这是什么?我必须把它放在哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2012-08-11
  • 2017-03-20
  • 1970-01-01
  • 2013-02-13
  • 2016-09-19
  • 2011-05-08
相关资源
最近更新 更多