我知道有一种方法可以预处理我的 info.plist 文件,但是是否有类似的方法来处理我的 Settings.bundle 中的字符串文件?
我的问题:我有一个 iPhone 应用程序,我希望用户知道当前安装的版本。我通过在应用程序设置中显示它来做到这一点。现在,每当我在我的info.plist改变捆绑版本时我也有更改的版本Root.strings中 Settings.bundle。我可以运行一个脚本操作来更新它,但是使用预处理器会很好,因为我可以用它做更多有趣的事情。
谢谢!
我想在 Pandoc 中的图像中添加诸如“图 1:废话”之类的标题,并能够像查看@Figure1 一样引用它们。我正在使用 gpp(一个预处理器)为我的图像添加标题并执行各种奇特的操作,例如更改大小、格式等。但是,我无法为图 1、图 2 等图像实现计数器。
我在我的 gpp 脚本中定义了以下函数:
\define{\counter}{0}
\defeval{count}{\eval{\counter+ 1}
Run Code Online (Sandbox Code Playgroud)
我在我的脚本中这样称呼它: \count
但是,\counter在我的 gpp 脚本中没有得到评估,我看到以下内容error: unfinished macro
我应该如何实现这个计数器?我在 gpp 中使用 -T (tex) 模式
我创建并应用了一个简单的 .xcconfig 文件,其中包含
GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = FOODEBUG
GCC_PREPROCESSOR_DEFINITIONS[config=Release] = FOORELEASE
Run Code Online (Sandbox Code Playgroud)
和 main.cpp 包含
#include <iostream>
// This warning IS shown
#if DEBUG
#warning DEBUG is set to 1
#endif
// This warning IS NOT shown
#ifdef FOODEBUG
#warning FOODEBUG is set
#endif
// This warning IS NOT shown
#ifdef FOORELEASE
#warning FOORELEASE is set
#endif
int main(int argc, const char * argv[])
{
// insert code here...
std::cout << "Hello, World!\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道为什么在 main.cpp 中,既没有定义 FOODEBUG 也没有定义 FOORELEASE ??! …
是否有输出“预处理”makefile 的-E选项,相当于 GCC 的选项?
我有一个项目由几十个模块的层次结构组成,每个模块都有自己的 makefile。构建是从主生成文件调用的。该主 makefile 包含包含、变量定义、命令行选项因变量等。
所以,本质上,我正在寻找处理过的 makefile,包括所有替换。
语境:
我经常使用Java 启动 shebang来使我的 Java 源文件像脚本一样运行。我还经常直接从 IntelliJ IDEA 运行项目。我的许多 Java 文件都以#!/path/to/my/java/launcher.
我意识到这种做法在除了最基本的测试场景之外的所有场景中都是有问题的,但这就是我使用它的全部目的。
这很方便,因为当我不在 IDEA 中进行本地测试时,我经常在多个不同的服务器上运行测试。将 IDEA 指向不同的远程服务器以在其上运行代码很麻烦,而直接访问这些服务器(代码已经存在,因为它存储在网络共享上)并使用 运行文件./MyFile.java,或者指示其他人执行以下操作要容易得多相同的。
问题:
如果我在 IDEA 中有一个带有 Java shebang 的文件,它将无法编译。该#!行(以及文件的其余部分)被 IDE 检测为语法错误。
问题:
如何配置 IDEA 来处理包含技术上无效语法 shebang 的 Java 文件?
理想情况下,我能够告诉 IDEA“#!在语法检查/编译时忽略 .java 文件中第一个和开头的行”。但是,如果我可以配置一条“语法检查/编译时忽略所有 .java 文件的第一行”规则,我也会很高兴。
更根本地说:如何让 IDEA 支持(编译,认为有效)包含 -#!前缀第一行的 Java 文件?
我尝试过的:
javac以使用管道/匿名文件描述符并tail排除第一行;没有这样的运气。我正在尝试替换硬编码的预处理器
#define MY_FILE_PATH "/usr/local/myfile"
Run Code Online (Sandbox Code Playgroud)
在 cmake 中使用 add_definitions
add_definitions(-DMY_FILE_PATH=${MY_FILE_PATH})
Run Code Online (Sandbox Code Playgroud)
并且在调用 cmake 时,我使用-DMY_FILE_PATH=/usr/tmp/myfile
但得到所有类型的错误,例如,'/' 标记之前的预期主表达式和 tmp 未找到等。是否可以在我的场景中使用 add_definitions 或者我应该尝试 configure_file。add_definitions 是否仅支持整数值?
在 C 标准的章节中6.4 Lexical elements写着
- ...预处理标记可以用空格分隔;它由注释(稍后描述)或空白字符(空格、水平制表符、换行符、垂直制表符和换页符)或两者组成。
可以看出,回车符不包括在空白字符的概念中。
另一方面,在标准 C 函数的描述中isspace写有 ( 7.4.1.10 The isspace function)
- ...标准空白字符如下:空格 ('')、换页符 ('\f')、换行符 ('\n')、回车符 ('\r')、水平制表符 ( '\t')和垂直制表符('\v')。在“C”语言环境中,isspace 仅对标准空白字符返回 true。
在描述预处理的部分中是否故意未提及回车符?如果是,原因是什么?
或者这只是标准的缺陷?
同样的问题对于 C++ 标准也有效。
我试图在 C++ 编译时获取编译文件的绝对路径。我知道该__FILE__宏 - 但是,该宏可以计算为绝对路径或相对路径,具体取决于预处理器的参数。
我想确保我的__FILE__(或任何其他宏)计算结果为文件的完整绝对路径。有没有办法可靠地跨平台做到这一点?(我正在为 VS2013、VS2015、ubuntu 上的 GCC、MinGW 上的 GCC 进行编译)
我正在编写一个在运行时使用 NVRTC(CUDA 9.2 版和 NVRTC 7.5 版)编译的 CUDA 内核,它需要stdint.h头文件,以便拥有int32_t等类型。
如果我编写没有包含的内核源代码,它可以正常工作。例如内核
extern "C" __global__ void f() { ... }
Run Code Online (Sandbox Code Playgroud)
编译为 PTX 代码,其中 f 定义为.visible .entry f.
但是如果内核源代码是
#include <stdint.h>
extern "C" __global__ void f() { ... }
Run Code Online (Sandbox Code Playgroud)
它报告A function without execution space annotations (__host__/__device__/__global__) is considered a host function, and host functions are not allowed in JIT mode.(也没有extern "C")。
传递-default-device使 PTX 代码.visible .func f,因此无法从主机调用该函数。
有没有办法在源代码中包含标题,并且仍然具有__global__入口功能?或者,一种知道 …
我的问题:我想获得一个带有 N_DIGITS 数字的 id,并且我希望 N_DIGITS 在预处理时可以自定义。我的 id 是一个整数,所以我想定义 10^N_DIGITS 作为这个数字的最大值。
换句话说:是否可以用宏作为指数预处理数字?
这是我的终极尝试:
#include <stdio.h>
#define N_DIGITS 5
#define MAX_N 10e ## N_DIGITS
int main()
{
printf("%d\n", MAX_N);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用,错误是error: exponent has no digits. 我不明白为什么这个原则不能实现,因为编译器知道一切,但我可能是错的。
无论如何我的语法不正确,我可以在这里得到一些帮助吗?