以 开头的优化设置有很多tree。有些是:
-ftree-内置调用-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce -ftree-支配者-选择 -ftree-dse -ftree-ter
这些旗帜有什么特别之处?
有没有办法为程序源指定,在编译期间应该使用哪些激活组选项?
在as/400上的大多数程序中,我们需要更改激活组的处理(因为默认行为根本没有用...).每次我编的程序之一,我一定要记得设置编译器选项(这是在PDM:进入14,打F4,变化DFTACTGRP来自*YES于*NO,打enter,变化ACTGRP到*NEW或者*CALLER,这取决于程序).因此,我们在开始时有很多带有注释的程序,有大量的惊叹号,提醒程序员这样做.是的,有时候你会忘记.
有没有诀窍,所以你不必记住自己?
我有一个使用 MRC 的 iOS 项目,但对于新源代码我想使用 ARC。如何设置项目以便-fobjc-arc为每个新文件添加标志?
更好的是针对特定目标单独设置它,因为该项目有 17 个目标,其中10 个使用 MRC,7 个使用 ARC。是否有可能按目标设置文件创建,以便使用 MRC 的文件会添加该标志?
使用build.sbt文件,如:
ThisBuild / organization := "com.company"
ThisBuild / version := "1.0.0-SNAPSHOT"
ThisBuild / scalaVersion := "2.11.12"
Global / concurrentRestrictions += Tags.limit(Tags.Test, 1)
Global / scalacOptions ++= Seq("-Ypartial-unification",
"-unchecked",
"-Xfatal-warnings",
"-Ywarn-dead-code",
"-Ywarn-inaccessible",
"-Ywarn-unused",
"-Ywarn-unused-import",
"-Ywarn-macros:after")
Run Code Online (Sandbox Code Playgroud)
我[error] bad option: '-Ywarn-macros:none'跑完了sbt clean compile
如果没有-Ywarn-macros:after,未使用的导入警告会在使用Circe宏的文件中引发虚假警告,例如:import io.circe.{ Decoder, Encoder }.
我正在努力寻找一种正确的方法来为所有目标传播正确的编译器标志。
假设有一个包含库和单元测试的项目。
ProjectFolder
|-WorkerLibFolder
|-Worker.cpp
|-Worker.hpp
|-CMakeLists.txt (2)
|-main.cpp
|-CMakeLists.txt (1)
|-TestsFolder
|-UnitTests.cpp
|-CMakeLists.txt (3)
Run Code Online (Sandbox Code Playgroud)
在 CMakeLists.txt (1) 中,我想全局设置编译选项,因为我假设项目的所有库的优化级别和其他标志应该相同。
add_compile_options(-Wall -Werror -Wno-error=maybe-uninitialized)用来实现它。
我还使用CMAKE_BUILD_TYPE了在CMAKE_CXX_FLAGS_RELEASE或CMAKE_CXX_FLAGS_DEBUG标志的帮助下自动设置所需优化级别的功能。
此外,这些变量之一被隐式传递给编译器的事实似乎很烦人,因为无论如何我必须提前为所需的优化标志设置这些变量,set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -DNDEBUG -DBOOST_DISABLE_ASSERTS")因为这-O3是默认设置的发布配置。
无论如何,直到我想-O0在编译测试环境 (UniTests.cpp) 时总是设置的那一刻,一切都很好。CMakeLists.txt (3) 生成 project_ut 可执行文件。我希望 WorkerLib 使用配置的优化级别(取自CMAKE_BUILD_TYPE)进行编译,但它自动意味着CMAKE_CXX_FLAGS_RELEASEwith-Ofast被传播到 UnitTest.cpp
我想我可能在这里做了一些奇怪的事情,并且有更好的方法来处理问题。这里的一个选择是在没有CMAKE_BUILD_TYPE功能帮助的情况下传递优化标志,但这似乎是错误的(因为我不想为每个目标维护标志列表)。
编辑:
#CMakeLists.txt(1):
cmake_minimum_required(VERSION 3.14.1)
project(TestProject LANGUAGES CXX C)
##### common comp flags #####
add_compile_options(-Wall -Werror -Wno-error=maybe-uninitialized)
##############################
set(RELEASE_FLAGS "-Ofast -DNDEBUG -DBOOST_DISABLE_ASSERTS") …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 arm-linux-gnueabihf gcc/g++ 编译器编写 xxx.toolchain.cmake 。
让我困惑的是,我是否应该使用-flax-vector-conversions编译标志。我阅读了编译器的文档/手册页,它告诉我们:
-flax-vector-conversions
Allow implicit conversions between vectors with differing numbers of elements and/or incompatible element types. This option should not be used for new code.
Run Code Online (Sandbox Code Playgroud)
(通过https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html)
我的两个困惑:
这个解释中的“向量”是什么意思?有没有例子可以说明这一点?
“新代码”是什么意思?为什么“新代码”不应该与此编译选项一起使用?
我有以下代码,我想在Iphone OS上运行,我应该为IOS使用什么编译器标志,以及在下面的代码中应该插入哪些代码?谢谢
#if defined(__BORLANDC__) || defined (__WATCOMC__) || defined(_MSC_VER) || defined(__ZTC__) || defined(__HIGHC__) || defined(_TURBOC_)
typedef long int Word32 ;
typedef short int Word16 ;
typedef short int Flag ;
#elif defined( __sun)
typedef short Word16;
typedef long Word32;
typedef int Flag;
#elif defined(__unix__) || defined(__unix)
typedef short Word16;
typedef int Word32;
typedef int Flag;
#elif defined(VMS) || defined(__VMS)
typedef short Word16;
typedef long Word32;
typedef int Flag;
#else
#error COMPILER NOT TESTED typedef.h needs to be updated, see readme …Run Code Online (Sandbox Code Playgroud) 我正在使用一个#ifdef块有条件地包含一个基于代码块 - Dflag传递给编译器.
有没有办法实现这个if?
有点像:
if (defined(flag)) {
}
Run Code Online (Sandbox Code Playgroud) 您好我最近安装了Xcode 5,但无法添加编译器标志.我想为自动引用计数添加编译器标志但是当我去构建阶段=>编译sources => .m文件并双击它或在选择它时按Enter键时,不会出现输入编译器标志的弹出窗口.
如何解决这个问题?谢谢
在ReactiveExtensions源代码中,有大量代码在不同的实现之间切换,例如
和一个片段
#if !NO_PERF
return new Distinct<TSource, TSource>(source, x => x, EqualityComparer<TSource>.Default);
#else
return Distinct_(source, x => x, EqualityComparer<TSource>.Default);
#endif
Run Code Online (Sandbox Code Playgroud)
这个标志的意图是NO_PERF什么,用它编译的库和没有它的库之间的行为有什么不同.