我从各种来源(虽然大多数来自我的同事)中听到过,-O3用g ++ 的优化级别进行编译在某种程度上是"危险的",并且除非被证明是必要的,否则应该避免.
这是真的,如果是的话,为什么?我应该坚持-O2吗?
除了设置-Wall和设置之外-std=XXX,还有什么其他真正有用的,但是在C中使用的知名度较低的编译器标志?
我对任何其他警告特别感兴趣,和/或在某些情况下将警告转换为错误,以绝对最小化任何意外类型不匹配.
我正在使用GCC 4.3编译我的C++应用程序.而不是手动选择我正在使用的优化标志-march=native,理论上应该添加适用于我正在编译的硬件的所有优化标志.但是我如何检查它实际使用的是哪些标志?
是什么区别gcc -pthread和gcc -lpthread它在编译多线程程序中使用?
我想知道你传递给gcc编译器的什么开关来关闭未使用的变量警告?我在Windows上获得了错误,我不想触摸增强代码:
C:\boost_1_52_0/boost/system/error_code.hpp: At global scope:
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable]
Run Code Online (Sandbox Code Playgroud)
我尝试使用两者-Wunused-value,-Wno-unused-value但都没有压制上面的消息.
什么是正确的命令,这是我的编译行:
g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
-c -o op.o op.cpp
Run Code Online (Sandbox Code Playgroud)
也许这-Wall超越了我的目标?
是否__attribute__((always_inline))强制函数由gcc内联?
在我的CMake项目开始时,我在变量CMAKE_CXX_FLAGS中设置通用编译标志,就像
set(CMAKE_CXX_FLAGS "-W -Wall ${CMAKE_CXX_FLAGS}")
Run Code Online (Sandbox Code Playgroud)
稍后,我需要附加其他特定于配置的编译标志(存储在BUILD_FLAGS中).我可以使用以下命令:
set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS ${BUILD_FLAGS})
Run Code Online (Sandbox Code Playgroud)
或者我是否必须手动添加CMAKE_CXX_FLAGS:
set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} ${BUILD_FLAGS}")
Run Code Online (Sandbox Code Playgroud)
防止BUILD_FLAGS覆盖CMAKE_CXX_FLAGS?
我在CMakeLists.txt中有以下内容:
project( Matfile )
SET ( CMAKE_CXX_FLAGS "-std=c++0x" )
set ( SOURCES
"foo.cpp"
"bar.cpp"
)
add_library(
Matfile
${SOURCES}
)
Run Code Online (Sandbox Code Playgroud)
您可能想象,我想要做的是使用标志-std = c ++ 0x编译我的C++源代码(我使用的是gcc,我需要C++ 11的功能).不幸的是,这不起作用,在我使用cmake生成makefile时,变量CMAKE_CXX_FLAGS完全无效.
如何在项目文件中设置此变量?
这似乎是一个非常愚蠢的问题,但我只花了不少于两个小时试图解决这个问题.
什么是"DNS_BLOCK_ASSERTIONS"(C编译器标志)?
我想要你的输入哪些gcc编译器标志在优化Xeons时使用?
在mtune或march中没有'xeon',哪个是最接近的匹配?