之前的版本对编译控制粒度,只能到target这一级:
```lua
-- 全局根配置,所有target都会被影响
add_defines("ROOT")
target("test")
-- target目标配置,只对test目标下的所有源文件编译生效
add_defines("TEST")
add_files("src/*.c")
```
最近给2.1.6开发版本中的add_files进行了改进,支持基于files更细粒度的编译选项控制,例如:
lua
target("test")
add_defines("TEST1")
add_files("src/*.c")
add_files("test/*
继续阅读 »
这几个实验都是上课时候一两小时实现的,因为老师给出的参考代码有些惨不忍睹(虽然我写的也没好到哪去).因为时间有限,就没用C++.
同样是因为时间有限,仅供参考,有bug概不负责.
代码如下
# -- coding: utf-8 --
class Bank(object):
def init(self):
self.totalpro = 0
self.process = []
self.res_num = 4
self.res_type = ['A', 'B', 'C', 'D']
self.Resources = {'A':10,
继续阅读 »
更新日志
第1章 熟悉 Objective-C
第1条 了解 Objective-C 语言的起源
Objective-C 为C语言添加了面向对象特性,是其超集。Objective-C 使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一条消息之后,究竟应执行何种代码,由运行期环境而非编译器来决定。
理解C语言的核心概念有助于写好Objective-C程序。尤其要掌握内存模型与指针。
第2条 在类的头文件中尽量少引入其他头文件
除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合。
有时无法使用向前声明,比如要声
继续阅读 »
xmake-vscode plugin is a xmake integration in Visual Studio Code.
It is deeply integrated with xmake and vscode to provide a convenient and fast cross-platform c/c++ development and building.
Features
Colorization
Completion Lists
StatusBar
Commands
Configuration
Build
Run and Debug
Record and Playback
Problem
Color
继续阅读 »
We create an empty console project first:
```bash
$ xmake create -P ./hello
create hello ...
create ok!👌
```
And xmake will generate some files:
```bash
$ cd ./hello
$ tree .
.
├── src
│ └── main.c
└── xmake.lua
```
It is a simple console program only for printing hello xmake!
```bash
$ cat ./src/main.c
incl
继续阅读 »
最近为了给xmake实现预编译头文件的支持,研究了下各大主流编译器处理预编译头的机制以及之间的一些差异。
现在的大部分c/c++编译器都是支持预编译头的,例如:gcc,clang,msvc等,用于优化c++代码的编译速度,毕竟c++的头文件如果包含了模板定义的话,编译速度是很慢的,
如果能够吧大部分通用的头文件放置在一个header.h中,在其他源码编译之前预先对其进行编译,之后的代码都能重用这部分预编译头,就可以极大程度上减少频繁的头文件冗余编译。
但是不同编译器对它的支持力度和处理方式,还是有很大差异的,并不是非常通用,在xmake中封装成统一的接口和使用方式,还是费了很大的功夫才搞定。
msvc的预编译头处理
预编译头
继续阅读 »
分析:6.4节《其他计数序列》里给出了Fibonacci数列的封闭形式,提示里也说“能否借助封闭形式来避免高精度算数”,但高精度算数还是无法避免。理由如下:more
F(n) = (a ^ n - b ^ n) / c
其中a,b,c为常数:
继续阅读 »
tbox的vector容器沿用了stl库中vector的命名,说白了就是以数组方式存储元素,也是整个容器库中最基础的容器之一。
当然,在c中用tbox的vector跟用stl的vector其实差不了太多,用起来都很方便。
先看个简单的例子熟悉下:
```c
// 初始化一个维护大小写敏感字符串的vector容器,第一参数设置元素自动增长大小,这里使用0表示默认大小
tb_vector_ref_t vector = tb_vector_init(0, tb_element_str(tb_true));
if (vector)
{
// 在头部插入元素
tb_vect
继续阅读 »
多线程的并发处理: 在有限时间内, 同时并发处理 n 个资源
```
//from https://talks.golang.org/2012/concurrency.slide#47
c := make(chan Result)
go func() { c
继续阅读 »
首先我们通过内置的工程模板创建一个空工程:
```bash
$ xmake create -P ./hello
create hello ...
create ok!👌
```
这个时候xmake将会产生一些工程文件,如下:
```bash
$ cd ./hello
$ tree .
.
├── src
│ └── main.c
└── xmake.lua
```
这个简单的程序仅仅只是为了打印输出: hello xmake!
```bash
$ cat ./src/main.c
include
int main(int argc, char** argv)
{
printf("hello xmak
继续阅读 »