- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有多个应用程序项目,它们都链接到同一个静态库项目。每个应用项目需要使用不同的设置来编译静态库项目。
目前我在静态库项目中有一个条件编译 header ,我们称它为 ViewType.h,它添加了更多特定于每个 View 的类型、typedef、宏等。
#define VIEW_A 1
#define VIEW_B 2
#define VIEW_C 3
#ifndef VIEWTYPE
#define VIEWTYPE VIEW_A
#endif
#if VIEWTYPE == VIEW_A
// further typedefs and defines tailored to VIEW_A
#elif VIEWTYPE == VIEW_B
// further typedefs and defines tailored to VIEW_B
#elif VIEWTYPE == VIEW_C
// further typedefs and defines tailored to VIEW_C
#endif
这里的问题是每个app项目都需要修改静态库项目中的VIEWTYPE,每次切换app项目都得重新修改VIEWTYPE。
不幸的是,我似乎无法在应用程序目标中将 VIEWTYPE=2(例如)定义为预处理器宏。而且我也无法在静态库项目中定义它,因为所有 3 个项目都包含相同的静态库项目,因为 .xcodeproj 在 3 个应用程序之间共享(即 .xcodeproj 被拖放到应用程序项目上;我'我没有使用工作空间)。
我知道一个问题是静态库是一个依赖目标,它是在考虑应用程序目标之前首先构建的。因此,也许有一些方法可以根据其他条件(即检查文件,或包括可选的特定于应用程序的 header )来决定库是为哪个应用程序构建的。
问题我如何创建宏或根据应用目标定义的宏/设置执行条件编译,然后由静态库项目遵守?
最佳答案
第一种也是最简单的方法是摆脱静态库,直接将源文件包含到依赖项目中。我经常发现中间静态库带来的麻烦远远超过它们的值(value)。当它们提供显着的构建性能改进时,它们的一大好处就来了,但它们不能在这里,因为无论如何你都要为每个最终目标重建静态库。
我会说,#defines 类型的使用几乎总是让我哭泣,并且可能暗示可以更好地处理的设计缺陷。例如,您可能想要实现返回所需类的方法(UIView layerClass
的方式)。更改类型定义的预处理器技巧可能会导致极其微妙的错误。 (我去年刚刚追查到一个这样的案例……这是一个可怕的、可怕的崩溃。)
也就是说,可以使用 xcconfig 文件解决此问题的某些版本的另一种方法。例如,如果静态库实际上有多个副本(即这是一个通常被复制到其他项目中的库),那么您可以使用具有 #include "../SpecialTypeDefs.xcconfig 的 xcconfig 文件“
。该文件将由每个项目提供以设置特殊声明。未能定义该文件将导致编译器错误,因此很容易避免错误。
但就个人而言,我会直接将文件包含到实际项目中并跳过库,除非它们真的很大。
关于objective-c - Xcode:在另一个项目使用的一个项目中定义预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19892416/
我正在阅读哈德利的 Advanced R并尝试一些东西。我正在尝试创建一个 lazy闭包函数返回一个带有提供的函数 data.frame在其环境中以及使用 with并且能够在以后提供额外的函数参数。
我有两个 ViewController。初始 ViewController 是输入和存储 URL 的地方。此初始 ViewController 的 viewDidLoad 还应该在应用程序启动时开始加
你是怎么用的 对于应用程序中的 ListView 项也应该在设备 <11 上运行? 由于 activated_state 在 HC 之前不可用,我只能想到两个肮脏的解决方法: 在您的 Activit
我正在为 android (2.1 > 3.1) 编写一个应用程序,我想使用熟悉的做法,即在 Honeycomb 应用程序中使用应用程序图标来进入家庭 Activity ,但是,当我之前运行该 Act
如果搜索的键不存在,我如何覆盖方法 GET 或编写一个将在服务器端执行的新函数返回另一个键值? 示例: 如果关键字“word_1 word_2 word_3 word_4”不存在则搜索关键字“word
对于我的存储库,我使用的是 Git 和 Stash。在 Stash 端,我限制了(只读)对 master 的访问权限,因此任何用户都可以从 master 分支分支以获取功能/分支,但不能直接 merg
如何配置dgrid及其存储以定义渲染行时是否已经选择了行? 例如,如果我的行数据是这样的: { id: 1, name: 'Item Name', selected: true } 我当前
有没有一种方法可以将变量从一个 BeanShell 前/后处理器引用到另一个 BeanShell 处理器(它们在同一个线程组中)? 如果我在 HTTP 请求下的 BeanShell 预处理器中创建了一
问题 我已尝试添加预操作 shell 脚本,这些脚本会根据我正在构建的内容打开/关闭我的 .pch 文件中的某些定义。 但是,在运行构建时,没有任何反应。我不是一个流利的 shell 脚本编写者,所以
我有一个 HTML 字符串用作 jQuery 输入文档。 // the variable html contains the HTML code jQuery( html ).find( 'p' ).
在 Mercurial 中允许 merge 之前有没有办法进行一些检查? 通过将以下内容添加到 ~/.hg/hgrc,我找到了更新前 Hook ,并拥有一个在允许更新之前运行的脚本: [hooks]
总结: 预 Controller Hook 是否在缓存期间执行?是否有任何 Hook 点可以执行? (系统前?) 我应该强调一个事实,即 Hook 不会影响发送到浏览器的内容。这不是问题。 详细版:
我正在使用适用于 android 的 Skobbler Map API,到目前为止它一直非常好。按照官方的“操作方法”,我已经能够将 map 应用到我的应用程序中。比我可以让应用程序下载 map 并离
当我安装bcrypt时我的 hapi js 项目的模块尚未安装,它显示类似 node-pre-gyp install --fallback-to-build 我尝试通过运行来安装; npm i nod
我试图使用此代码的变体: apply plugin: 'java' apply plugin: 'idea' idea.workspace.iws.withXml { provider ->
假设我们有一个 PHP 项目,其依赖项 A 和 B 分别依赖于 PHP 库 X,但版本不同。 通常,人们会使用诸如 composer 之类的 PHP 依赖管理器,它可以通过在与 A 和 B 兼容的版本
这似乎违背了代码块的目的,但我希望能够在代码块中加粗。例如,如果我想将返回行加粗: int main(void) { **return 0;** } 最佳答案 您必须在 HTML 中执行此操作
我们是否应该使用 Huggingface(预)训练一个 BERT 无框模型的小写输入数据?我查看了 Thomas Wolf ( https://github.com/huggingface/trans
我有两个模式: 技能: var mongoose = require("mongoose"); var SkillSchema = new mongoose.Schema({ skill: {
我这里有问题。这适用于 Chrome,但我无法在 IE11 的 index.html 中使用任何动画。当它不想工作时,我会看到一个静态屏幕。同样在 IE 中,消息不会像它应该的那样消失。如果我将 di
我是一名优秀的程序员,十分优秀!