久久人人爽人人爽人人爽,亚洲欧洲日产国码无码久久99,久久久WWW成人免费毛片http://m.shnenglu.com/Roger/御物而行 御風而飛zh-cnTue, 13 May 2025 00:48:07 GMTTue, 13 May 2025 00:48:07 GMT60WeiboHotGather Downloadhttp://m.shnenglu.com/Roger/archive/2012/11/15/195242.htmlRogerRogerThu, 15 Nov 2012 10:03:00 GMThttp://m.shnenglu.com/Roger/archive/2012/11/15/195242.htmlhttp://m.shnenglu.com/Roger/comments/195242.htmlhttp://m.shnenglu.com/Roger/archive/2012/11/15/195242.html#Feedback0http://m.shnenglu.com/Roger/comments/commentRss/195242.htmlhttp://m.shnenglu.com/Roger/services/trackbacks/195242.html

Roger 2012-11-15 18:03 發表評論
]]>
Cmake的介紹和使用 Cmake實踐http://m.shnenglu.com/Roger/archive/2011/11/17/160368.htmlRogerRogerThu, 17 Nov 2011 12:18:00 GMThttp://m.shnenglu.com/Roger/archive/2011/11/17/160368.htmlhttp://m.shnenglu.com/Roger/comments/160368.htmlhttp://m.shnenglu.com/Roger/archive/2011/11/17/160368.html#Feedback2http://m.shnenglu.com/Roger/comments/commentRss/160368.htmlhttp://m.shnenglu.com/Roger/services/trackbacks/160368.html

Cmake優點:

1.       開發源代碼,實用類BSD許可發布。

2.       跨平臺,并可以生成native編譯配置文件,在linux/unix平臺,生成makefile,在mac平臺可以生成xcode,在windows平臺可以生成msvc工程的配置文件。

3.       能夠管理大型項目

4.       簡化編譯構建過程和編譯過程,只需要cmake+make就可以

5.       高效率

6.       可擴展,可以為cmake編寫特定功能的模塊,擴充cmake功能

如何安裝cmake

1.       Cmake的安裝可以使用autotools進行安裝,點擊cmake-2.8.6.tar.gz 鏈接,可以對軟件進行下載。

2.       ./configure

3.       make

4.       sudo make install

 

Cmake的原理

 

Helloworld cmake

//main.cpp

#include<cstdio>

 

int main()

{

    printf("hello world from main\n");

    return 0;

}

 

創建CMakeLists.txt(注意大小寫一個字母都不能錯)

向該文件中加入以下幾行(稍后會做解釋)

PROJECT (HELLO)

SET(SRC_LIST main.cpp)

MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})

MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})

ADD_EXECUTABLE(hello ${SRC_LIST})

運行以下命令:

cmake . (別忘記加上這個點,表示當前目錄)


注意執行完這句話之后會生成幾個文件如下:


CMakeFiles, CMakeCache.txt, cmake_install.cmake等文件,并且生成了Makefile

然后執行make 就可以生成可執行文件hello


這是當前目錄下就會生成可執行文件如下圖:


對例子的解釋:

CMakeLists.txt的內容如下:

PROJECT (HELLO)

SET(SRC_LIST main.cpp)

MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})

MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})

ADD_EXECUTABLE(hello ${SRC_LIST})

 

Project的指令的語法是:

PROJECT(projectname [CXX] [C] [JAVA])

這個執行是用來定義工程的名稱的和定義工程支持的語言。這個指令也隱式的定義了兩個cmake變量:<projectname>_BINARY_DIR以及<projectname>_BINARY_DIR,這里就是HELLO_BINARY_DIR和HELLO_SOURCE_DIR,兩個變量指的都是當前工程的路徑。

SET指令的語法:

SET(VAR[VALUE] [CACHE TYPE DOCSTRING [FORCE]])

Set指令是用來顯式的定義變量的,我們之前用到的是SET(SRC_LIST main.cpp)如果有多個源文件,也可以定義成SET(SRC_LIST main.cpp t1.cpp t2.cpp)。

 

MESSAGE指令的語法是:

MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)

這個指令用于向終端輸出用戶信息,包含三種類型:

SEND_ERROR,產生錯誤,生成過程被跳過。

SATUS,輸出前綴為-的信息。

FATAL_ERROR,立即終止所有cmake過程。

我們在這里使用的是STATUS信息輸出,顯示了由PROJECT指令頂一頂兩個飲食變量HELLO_BINARY_DIR和HELLO_SOURCE_DIR。

 

ADD_EXECUTABLE(hello ${SRC_LIST})

定義了這個工程會生成一個文件名為hello的可執行文件,相關的源文件是SRC_LIST中定義的源文件列表,本例中你可以直接寫成ADD_EXECUTABLE(hello main.c)。

 

將本例改寫成一個最簡化的CMakeLists.txt:

PROJECT(HELLO)

ADD_EXECUTABLE(hello main.c)

 

下面我們介紹一個比較實用的例子,即包含生成靜態庫又包含引入外部頭文件和鏈接庫的cmake demo。

先按照工程規范建立工程目錄,并編寫代碼,以下面的工程目錄為例進行解釋這個例子,工程的目錄結構為:

 

編譯工程要實現的目標:

1. 添加子目錄doc,用以放置這個工程的文檔hello.txt

2. 生成hello的靜態庫,并在main可執行程序鏈接hello靜態庫

3. 在這個工程中添加COPYRIGHT,README

4. 在工程目錄中添加一個run.sh的腳本,用以調用生成的二進制可執行文件

5. 將生成的二進制文件生成到bin子目錄中

6. 編寫安裝程序

 

1. 編寫CMakeLists.txt

由于一個工程目錄中包含多個項目,其中在此項目中包含util項目和main項目,其中util項目是用以生成main程序需要的靜態庫,main是用以生成可執行文件。

在工程項目中的父目錄向有一個CMakeLists.txt是用以聲明定義工程需要的Cmake設置還定義了子目錄src,用以遞歸的調用src中的MakeLists.txt。其中工程目錄的CMakeLists.txt內容定義如下:

PROJECT(HELLO)

ADD_SUBDIRECTORY(src)

在src里面的CMakeLists.txt是用以定義src目錄包含的兩個工程的依賴關系分別進行編譯。

util目錄里面的CMakeLists.txt是用以定義生成util靜態庫的規則,其中內容如下:

SET(LIBRARY_OUTPUT_PATH ${HELLO_SOURCE_DIR}/lib)

SET(CMAKE_C_COMPILER g++)

SET(SRC_LIST hello.c)

 

INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)

ADD_LIBRARY(util STATIC ${SRC_LIST})

其中SET(LIBRARY_OUTPUT_PATH ${HELLO_SOURCE_DIR}/lib)定義了庫生成的路徑,LIBRARY_OUTPUT_PATH是一個內部變量,存放庫生成路徑。

SET(SRC_LIST hello.c)是用來定義庫文件需要的源文件。

INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)是用來定義非標準庫頭文件要搜索的路徑。其中INCLUDE_DIRECTORIES命令的格式為:

INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)

ADD_LIBRARY(util STATIC ${SRC_LIST})是用來定義生成的庫的名字,以及生成庫的類型和生成庫需要的源文件,其中ADD_LIBRARY命令格式為:

     ADD_LIBRARY(libname    [SHARED|STATIC|MODULE]

          [EXCLUDE_FROM_ALL]

                source1 source2 ... sourceN)

SET(CMAKE_C_COMPILER g++)是用來定義c的編譯器為g++,防止出現C和C++代碼在不指定C編譯器的情況下默認使用gcc,導致系統編譯混亂。

在main目錄中的CMakeLists.txt是用來定義可執行程序編譯和鏈接時所需要的一些命令或環境。內容如下:

SET(EXECUTABLE_OUTPUT_PATH ${HELLO_SOURCE_DIR}/bin)

SET(SRC_LIST main.cpp)

 

INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/include)

LINK_DIRECTORIES(${HELLO_SOURCE_DIR}/lib)

 

ADD_EXECUTABLE(hello ${SRC_LIST})

TARGET_LINK_LIBRARIES(hello util)

INCLUDE_DIRECTORIES命令是定義工程的include文件夾,其中存放使用到的庫的頭文件,LINK_DIRECTORIES是定義工程的庫文件,其中存放著庫文件,ADD_EXECUTABLE是定義生成的可執行文件,TARGET_LINK_LIBRARIES用以定義鏈接時需要的庫文件。

2.在工程目錄下創建build目錄,并采用out-of-source方式編譯項目。執行命令make ..,執行結果如下:


執行make,這時在build目錄下生成了中間編譯文件:


執行make命令,結果如下:


可以看到工程創建和編譯成功了。

2. 安裝

在工程目錄下添加COPYRIGHT、README、和run.sh,重新編輯工程目錄下的CMakeLists.txt。在CMakeLists.txt中添加如下命令:

INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake_demo)

INSTALL(PROGRAMS run.sh DESTINATION bin)

INSTALL(PROGRAMS bin/hello DESTINATION bin)

INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake_demo)

這些命令表示在執行make install命令時,安裝程序會拷貝相應的文件、目錄或程序到指定的前綴開始的目錄中,cmake執行命令如下:

cmake -DCMAKE_INSTALL_PREFIX=~/data/cmake_demo ..這時將工程目錄安裝到~/data/cmake_demo目錄下。執行結果如下:


其中cmake編譯c、c++工程完畢。



Roger 2011-11-17 20:18 發表評論
]]>
Makefile 解析http://m.shnenglu.com/Roger/archive/2011/11/17/160366.htmlRogerRogerThu, 17 Nov 2011 12:04:00 GMThttp://m.shnenglu.com/Roger/archive/2011/11/17/160366.htmlhttp://m.shnenglu.com/Roger/comments/160366.htmlhttp://m.shnenglu.com/Roger/archive/2011/11/17/160366.html#Feedback0http://m.shnenglu.com/Roger/comments/commentRss/160366.htmlhttp://m.shnenglu.com/Roger/services/trackbacks/160366.html

一個工程中的源文件可能很多的情況下,按其類型、功能、模塊分別放到若干個目錄中,makefile定義了一系列的規則,用以指定那些需要先編譯,那些需要后編譯,那些需要重新編譯,和一些更復雜的操作。,makefile的好處就是自動化編譯,一點寫好,只需要make命令,整個工程就會自動編譯,提高了項目的管理能力和軟件的開發效率。

Makefile 文件解讀

 

edit : main.o kbd.o command.o display.o \ 

insert.o search.o files.o utils.o 

cc -o edit main.o kbd.o command.o display.o \ 

insert.o search.o files.o utils.o 

 

main.o : main.c defs.h 

cc -c main.c 

kbd.o : kbd.c defs.h command.h 

cc -c kbd.c 

command.o : command.c defs.h command.h 

cc -c command.c 

display.o : display.c defs.h buffer.h 

cc -c display.c 

insert.o : insert.c defs.h buffer.h 

cc -c insert.c 

search.o : search.c defs.h buffer.h 

cc -c search.c 

files.o : files.c defs.h buffer.h command.h 

cc -c files.c 

utils.o : utils.c defs.h 

cc -c utils.c 

clean : 

rm edit main.o kbd.o command.o display.o \ 

insert.o search.o files.o utils.o 

 

反斜杠(\)是換行的意思。上述makefile文件可以命名為makefileMakefile,如果在目錄中輸入make,就可以生成edit可執行文件。如果想要刪除可執行文件或者是中間目標文件直接make clean就行了。

依賴關系:

有上述例子可以看出,目標文件包含兩種:執行文件(edit)和中間目標文件(*.obj),依賴文件(prerequisites)就是冒號后面的那些.c.h文件。每一個.o 文件都有一組依賴文件,這些.o的文件又是執行文件edit的依賴文件。其實依賴關系就是說明了目標文件是有那些文件申城的,換言之就是目標文件是哪些文件更新的。

定義好依賴關系后,后面的一行就定義了如何生成目標文件的操作系統命令,一定要以tab鍵開頭。記住make并不管命令式怎么工作的,它只關心定義的命令。Make會比較目標文件和依賴文件的修改日期,如果依賴文件的日期要比目標文件的日期更新,或者是目標文件不存在的話,make就會執行后續定義的命令。

 

Make是如何工作的

1.       查找Makefilemakefile文件

2.       查找第一個目標文件,并將這個文件作為最終的目標文件

3.       查找目標文件是否存在,或者是當前目標文件依賴的.o 文件的文件修改時間要比當前目標文件新,則執行后面定義的命令來生成edit這個文件

4.       如果edit依賴的.o文件也存在,那么make會在當前文件中查找目標文件為.o文件的依賴性,如果找到則根據哪一個規則生成.o文件。

5.       根據c文件和.h文件,make生成.o文件,然后生成最終目標文件。

 

Make會一層已成的查找文件的依賴關系,知道最終編譯出第一個目標文件。在查找過程中,如果出現錯誤,比如被依賴的文件找不到,那么make就會直接退出,并報錯,但是對于所定義的命令的錯誤,或者是編譯不成功,make會置之不理。但是當查找到一個文件的依賴關系的時候,并且執行依賴關系之后命令,冒號后面的依賴文件如果還是不存在,那么make就會退出。

由上可知,想clean這種沒有被第一個目標文件直接或間接關聯,那么他后面定義的命令將不會自動執行。如果想顯式執行要求make執行clean之后的命令,“輸入make clean”就行了,用以清除所有的目標文件,便于重新編譯。

1.       另外makefile中也可以添加一些宏定義(變量)

2.       gnu make可以實現自動推倒



Roger 2011-11-17 20:04 發表評論
]]>
C++編譯器 GCC G++ 使用http://m.shnenglu.com/Roger/archive/2011/11/13/160023.htmlRogerRogerSun, 13 Nov 2011 07:01:00 GMThttp://m.shnenglu.com/Roger/archive/2011/11/13/160023.htmlhttp://m.shnenglu.com/Roger/comments/160023.htmlhttp://m.shnenglu.com/Roger/archive/2011/11/13/160023.html#Feedback1http://m.shnenglu.com/Roger/comments/commentRss/160023.htmlhttp://m.shnenglu.com/Roger/services/trackbacks/160023.htmlgcc和g++都是GNU(組織)的一個編譯器。
但兩者有一些區別:后綴為.c的文件gcc把它當做c程序,g++當做c++程序。后綴為c++的兩者都當做c++程序。對于cpp程序,無論gcc或者是g++編譯階段都是相同的,都是用的gcc進行編譯,但是在鏈接階段gcc不能自動和c++程序使用的庫連接,如果使用的話,形如下: gcc helloworld.cpp -lstdc++ -o helloworld
所以我們通常用g++來進行連接(g++會自動連接c++常用庫),所以為了使用方便對于cpp程序干脆編譯鏈接統統都使用g++,這樣就給人一種錯覺,好像cpp只能用g++編譯。

Gcc編譯處理過程是什么呢?
下面以helloworld程序為例去進行解釋過程:
其中hello.c的內容如下:
#include

int main()
{
printf("hello world\n");
}
第一步:預處理
預  閱讀全文

Roger 2011-11-13 15:01 發表評論
]]>
詳盡的Mysql安裝過程 講解http://m.shnenglu.com/Roger/archive/2011/10/09/157859.htmlRogerRogerSun, 09 Oct 2011 05:30:00 GMThttp://m.shnenglu.com/Roger/archive/2011/10/09/157859.htmlhttp://m.shnenglu.com/Roger/comments/157859.htmlhttp://m.shnenglu.com/Roger/archive/2011/10/09/157859.html#Feedback3http://m.shnenglu.com/Roger/comments/commentRss/157859.htmlhttp://m.shnenglu.com/Roger/services/trackbacks/157859.html

安裝步驟:

inux平臺mysql source安裝的安裝及配置步驟

1、 下載MySQLsourcecode

進入mysql download頁面http://dev.mysql.com/downloads/

  點擊進入http://dev.mysql.com/downloads/mysql/ 到如下頁面:

    

   選擇sourcecode下拉列表進入到如下頁面:

    
  點擊 Generic Linux (Architecture Independent), Compressed TAR Archive,進入
    
選擇 » No thanks, just take me to the downloads!

進行下載

2、 安裝MySQL

解壓mysql5 的安裝包:

[root@niutian365 local]# tar zxvf mysql-5.5.16.tar.gz

進入解壓后的安裝包

:[root@niutian365 local]# cd mysql-5.5.16

3、 選擇root用戶進入,建立mysql用戶組和用戶名:

建立mysql用戶組:groupadd mysql

建立mysql用戶并將mysql用戶加到mysql用戶組中: useradd -g mysql mysql

4、 創建/usr/mysql/mysql/usr/mysql/data/usr/mysql/log目錄

mkdir /usr/mysql/mysql

mkdir /usr/mysql/data

cmake 編譯sourcecode

cmake -DCMAKE_INSTALL_PREFIX=/mysql/mysql

-DMYSQL_DATADIR=/mysql/mysql/data

-DDEFAULT_CHARSET=utf8

-DDEFAULT_COLLATION=utf8_general_ci

-DWITH_INNOBASE_STORAGE_ENGINE=1

-DWITH_ARCHIVE_STORAGE_ENGINE=1

-DWITH_BLACKHOLE_STORAGE_ENGINE=1

-DWITH_FEDERATED_STORAGE_ENGINE=1

-DWITH_PARTITION_STORAGE_ENGINE=1

-DENABLED_LOCAL_INFILE=1

-DMYSQL_UNIX_ADDR=/mysql/mysql/data/mysql.sock

5、 復制配置文件到/etc

[root@niutian365 local]#vi /etc/my.cnf

修改

[mysqld]

basedir=/home/mysql/mysql

datadir=/home/mysql/data

socket=/var/lib/mysql/mysql.sock

[mysqld_safe]

log-error=/home/mysql/log/mysqld.log

pid-file=/home/mysql/log/mysqld.pid

6、 修改文件的文件主:

chown –R mysql:mysql /home/mysql/log/

chown –R mysql:mysql /var/lib/mysql

 

運行[root@niutian365 local]#./usr/local/mysql/bin/mysql_install_db

在這一步中可能會發生錯誤,查看錯誤原因,如果是由于權限的問題則需要將父目錄擁有者改成mysql:mysql,使用chown –R mysql:mysql XXX

7、 運行mysql

進入mysqlbin目錄,運行sh mysqld_safe

如果不能正常運行,可以查看log目錄下的mysqld.log,查看錯誤信息,然后做出相應的修改。

8、 mysql注冊為服務

mysql源代碼目錄的support-files/mysql.server拷貝至/etc/init.d/,重命名為mysqld

安裝chkconfig: apt-get install chkconfig 

運行 chkconfig -add mysql注冊服務

運行 mysql start開啟服務

運行 mysql stop關閉服務

 

修改遠程登錄mysql權限,現在提供兩種支持遠程登錄的方法:

1.       改表法。其中在user表中的host那一列保存的是user允許的用戶登錄的位置信息,通過修改這一列的數據來修改mysql的遠程登錄,使用如下命令進入mysqlmysql –u root –p 輸入密碼(默認為空)第一次進入到數據庫系統。

選擇數據庫:mysql> use mysql;

如下圖所示執行sql命令:

說明: C:\Users\roger\AppData\Roaming\Tencent\Users\455769859\QQ\WinTemp\RichOle\EOQH1V)J62%D[KFZM8N)MB5.jpg

由上圖可以看到,mysql只允許127.0.0.1localhost,以及localhost.localdomain的機器以root身份登錄到mysql數據庫中,下面我們做如下更改:

說明: C:\Users\roger\AppData\Roaming\Tencent\Users\455769859\QQ\WinTemp\RichOle\4AY[GQ~VX4TDD$S4@)[E[ZS.jpg

上面的error是有host是唯一屬性導致的錯誤,可以不用理會,現在我們已經改好了mysql遠程登錄的配置,一定要主要通過如下命令是上述做的改動生效。

mysql> FLUSH PRIVILEGES;

好了現在可以在其他機器上進行遠程登錄mysql了。

2.       授權法。

使用如下命令:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '111111' WITH GRANT OPTION;root用戶在任意機器上以111111密碼訪問,上面的執行結果如下:

實際上,在user表中添加了一行,如上面標注部分。如果你想允許用戶myuserip192.168.1.3的主機連接到mysql服務器,并使用mypassword作為密碼,執行如下語句:

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

Mysql修改密碼:

UPDATE user SET password=password('111111') where user='root'; 

mysql> FLUSH privileges;

如下圖:

         說明: C:\Users\roger\AppData\Roaming\Tencent\Users\455769859\QQ\WinTemp\RichOle\]T~OX)`1~3OC8XFW04KP9DI.jpg

請注意,此密碼是經過hash后的密碼,不能用原密碼如mysql> update user set password = 111111 where user = 'root' ;這樣是不正確的。

Mysql添加用戶:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'sphinx'@'%' IDENTIFIED BY '111111' WITH GRANT OPTION;                          

Query OK, 0 rows affected (0.00 sec)

 

mysql> FLUSH PRIVILEGES;                                                                   

Query OK, 0 rows affected (0.00 sec)

以上命令是創建sphinx用戶遠程登錄mysql,密碼是111111

 



Roger 2011-10-09 13:30 發表評論
]]>
人妻无码αv中文字幕久久| 久久人妻少妇嫩草AV蜜桃| 久久国产美女免费观看精品| 色诱久久av| av午夜福利一片免费看久久| 久久香蕉一级毛片| 中文精品99久久国产 | www久久久天天com| 久久精品国产一区二区三区不卡| 亚洲欧美日韩久久精品| 久久大香香蕉国产| 亚洲国产欧美国产综合久久| 国产成人精品久久亚洲高清不卡| 久久精品日日躁夜夜躁欧美| 日本三级久久网| 囯产精品久久久久久久久蜜桃| 日韩欧美亚洲国产精品字幕久久久| 国产A级毛片久久久精品毛片| 久久天堂电影网| 亚洲综合伊人久久大杳蕉| 亚洲午夜福利精品久久 | 亚洲国产成人久久综合碰| 亚洲国产精品无码成人片久久| 久久久无码精品亚洲日韩软件| 久久无码人妻一区二区三区| 亚洲精品国产综合久久一线| 亚洲成人精品久久| 久久久久久久综合日本亚洲| 久久精品国产AV一区二区三区 | 久久无码中文字幕东京热| 日本久久久久久久久久| 热re99久久精品国产99热| 狠狠色丁香久久综合五月| 91精品久久久久久无码| 99久久久国产精品免费无卡顿| 久久久久亚洲AV成人网人人网站| 欧美久久久久久| 无码日韩人妻精品久久蜜桃 | 久久精品国产精品亚洲艾草网美妙| 亚洲成人精品久久| 久久久精品人妻无码专区不卡|