Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake-clang和c++;0x_C++_C++11_Cmake - Fatal编程技术网

C++ CMake-clang和c++;0x

C++ CMake-clang和c++;0x,c++,c++11,cmake,C++,C++11,Cmake,当使用clang++时,我如何使CMake在编译时使用-std=c++0x标志,而不是在链接时使用 有几个其他的帖子,关于使用CLAN作为编译器,但是我没有发现任何关于设置C++标准的提示。 以下是我尝试过的: CMakeLists.txt: project(test) add_executable(main main.cxx) ClangOverride.txt: SET (CMAKE_C_FLAGS_INIT "-Wall -std=c99") SET (CM

当使用clang++时,我如何使CMake在编译时使用
-std=c++0x
标志,而不是在链接时使用

有几个其他的帖子,关于使用CLAN作为编译器,但是我没有发现任何关于设置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)

如何避免这种情况?

使用添加定义(“-std=c++0x”)而不是设置CXX标志。

Hmm,AFAIK,CMake不应该使用编译器驱动程序链接对象文件。什么是
CMAKE\u USER\u MAKE\u RULES\u OVERRIDE
呢?如果你不希望这个选项出现在C目标中,你必须在CMAKE\u CXX\u标志中设置它。这是什么?我必须把它放在哪里?