我使用打印出C预处理器的输出
gcc -E a.c
Run Code Online (Sandbox Code Playgroud)
输出包含许多行
# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "a.c"
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 1 3
# 19 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 3
# 1 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 1 3
# 31 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
# 32 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/_mingw.h" 3
# 20 "c:\\mingw\\bin\\../lib/gcc/mingw32/4.5.0/../../../../include/stdio.h" 2 3
Run Code Online (Sandbox Code Playgroud)
我从未在C中看到过这种语法.有人可以解释这是做什么的吗?
我一直在阅读有关Phing和Ant的内容,我不确定这些工具对这种情况最有用.
它可以很容易地调试语句等,但我会给你我们的文字scanario.
我们有一个可下载的PHP应用程序的免费和高级版本,而不是只包含隐藏在某处的变量然后执行:
if($premium == true) {
echo 'some additional functionality';
} else {
echo 'basic functionality';
}
Run Code Online (Sandbox Code Playgroud)
显然,有人可以接受源并更改该变量,然后爆炸 - 他们窃取了我们的代码.像Ioncube之类的东西在我的经验中完全不实用,对托管公司的支持还不够好.
我更喜欢某些东西..或许类似于此:
## if premium ##
echo 'some additional functionality';
## else ##
echo 'basic functionality';
## endif ##
Run Code Online (Sandbox Code Playgroud)
然后我会运行两个构建,一个将premium设置为true,一个设置为false,这将生成两个简单的文件:
echo 'some additional functionality';
Run Code Online (Sandbox Code Playgroud)
和
echo 'basic functionality';
Run Code Online (Sandbox Code Playgroud)
能够仅基于传递给构建应用程序的相同条件包含整个文件也是非常有帮助的.
我找不到办法做到这一点,但如果可能,我愿意接受任何其他想法.
帮助很棒,
UPDATE
使用C预处理器非常棒,看起来它可以完成我需要的一切.但是,我找不到如何做以下3件事.
#1我需要删除生成的输出文件中的注释.以下是这些例子.
# 1 "./index.php"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "./index.php"
Run Code Online (Sandbox Code Playgroud)
我没有在您链接到的手册页中找到如何执行此操作的示例.
#2我需要递归遍历每个发现的文件.当我运行当前代码时,我收到一个错误:../target/./folder/test.php: No such file or directory
所以基本上我有我的'source'文件夹,它包含一个名为'folder'的子文件夹,它不会重新创建它,也不会重新创建它(test.php)
#3我确信这个很容易 - …