积累日常生活的点滴,开发过程的心得。

Makefile中对不同文件使用不同的编译选项

有时,我们需要对不同文件使用不同的编译选项,比如对某些SSE指令使用AVX,但是对其他一些指令使用SSE,注意-mavx会将一些SSE指令自动替换为AVX指令,同样的-msse4.1有时会将SSE2的指令自动转换为SSE4指令,这会导致SSE2的CPU上运行时core dump。所以我们要强制只针对某些文件使用avx或者sse指令。下面就是一个简单的例子

CC=gcc
SRC=source1.c source2.c source3.c
OBJ=$(patsubst %.c,%.o,$(SRC))
EXE=test
FLAGS= -g -O2

source2.o: FLAGS+=-fopenmp

all: $(EXE)

$(EXE): $(OBJ)
$(CC) -o $@ $^ $(FLAGS)

%.o: %.c
$(CC) -c -o $@ $^ $(FLAGS)

clean:
rm $(EXE)$
rm *.o
注意copy时,规则下一行要有Tab,不能是空格,否则make会报告分隔符错误。

在64位Ubuntu上安装32位库

apt-get install libssl-dev:i386

在ubuntu上安装boost

参考
http://particlephysicsandcode.wordpress.com/2013/03/11/installing-boost-...

编译32位的boost,需要下面的命令
sudo ./b2 address-model=32 --with=all -j 2 install

在64位linux上编译32位程序

将batch批处理移植为Shell脚本

Shell脚本
1.要以#!/bin/bash开头

2.变量引用赋值语句
Shell
a="123"
批处理
set a=123
引用写法,后一种写法在变量和字符串拼接时可以避免歧义
$a 或者 ${a}
批处理
%a%

3.路径名最好都统一成反斜杠

4.判断文件是否存在
批处理
if NOT EXIST %input% (
Shell
if [ ! -f $input ]; then

5.表达式计算
批处理
set /A a2=%a%/2
shell
half=2
let a2=($a / $half)

6.获取系统时间转换为指定格式字符串
批处理
set date=%date: =0%
set adate=%adate:~0,4%%adate:~5,2%%adate:~8,2%
Shell
adate=$(date +"%Y%m%d")

7.遍历文件
批处理
for /f "usebackq" %%i in (`dir /b %dir%\*.txt`) do call :test_file %%~ni %%i
exit /b
:test_file
echo %1
exit /b

Shell
for i in $dir/*.txt; do
id=$i
echo $id

Virtualbox 实在是不给力

一直用的virtualbox,主要是嫌弃vmware太大。
结果今天要在虚拟机里面测试一个sse4的指令,搞了半天,发现virtualbox不允许在虚拟机中使用SSE4的指令,没办法只好换成vmware了。

学习bash这本Oreilly的书真的写得像屎一样

不解释

在Ubuntu 上安装Netbeans

注意在Ubuntu下装Netbeans之后,无法创建新工程,总是说Please Wait,原因是Ubuntu用的是OpenJDK,而Netbeans需要Oracle的JDK,安装方法

http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux

用boost thread的一个简单例子

客户又要求用boost的thread移植一个windows的DLL到linux,真tmd。

#include
#include

using namespace std;

void ThreadFunction()
{
int counter = 0;

for(;;)
{
cout << "thread iteration " << ++counter << " Press Enter to stop" << endl;

try
{
// Sleep and check for interrupt.
// To check for interrupt without sleep,
// use boost::this_thread::interruption_point()
// which also throws boost::thread_interrupted

同步内容