cmake工程目錄結構
我這里所說的工程目錄結構其實就是哪些文件叫什么名字,什么文件放到什么文件夾下。當然這只是我自己的愛好,你也可以探索自己的風格。下圖是我的工程目錄結構:
lib: 生成的庫文件
src: 源文件(.cpp .cc)
include: 頭文件(.h .hpp)
build: 一般在這個文件夾下執行cmake ..(..之前有一個空格,表示你要使用的CMakeLists.txt文件在當前的上層路徑),生成的Makefile文件也在這個路徑下。
bin: 一般放生成的可執行文件
CMakeLists.txt: cmake的配置文件,關於配置文件怎么寫的教程(http://blog.csdn.net/kaizi318/article/details/7721624)
我的CMakeLists.txt是這樣寫的:
#井好表示注釋 CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #設定最小版本號 PROJECT( test ) #設定工程名 SET(CMAKE_CXX_COMPILER "g++") #設置編譯器(可選的有gcc,g++) # 設置用debug還是release模式。debug允許斷點,而release更快 #set( CMAKE_BUILD_TYPE Debug ) set( CMAKE_BUILD_TYPE Release ) # 設置編譯選項 # 允許c++11標准、O3優化、多線程。match選項可避免一些cpu上的問題 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -pthread" ) #設定可執行二進制文件的目錄 SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) #設定存放編譯出來的庫文件的目錄 SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #並且把該目錄設為連接目錄 LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)
# find_package (Threads REQUIRED) #設定頭文件目錄 INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include) #增加子文件夾(注意我們的src路徑是通過子文件夾的形式添加的,在這里面也是可以些CMakeLists.txt的) ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)
或則是ADD_SUBDIRECTORY( src)
多線程
進程是分配資源的基本單位,線程是輕量級的進程,為什么是輕量級的,因為線程是依附進程而存在的,共享進程的資源,線程之間切換比進程切換更加快速。
教程鏈接1http://www.runoob.com/cplusplus/cpp-multithreading.html
教程鏈接2http://www.cnblogs.com/haippy/p/3284540.html
新建src/CMakeLists.txt
##src/CMakeLists.txt ADD_EXECUTABLE( main main.cpp )
ADD_LIBRAR
add_library( mythread SHARED
main.cpp
)
新建src/main.cpp
//src/main.cpp #include<iostream> #include<pthread.h> #include<unistd.h> using namespace std; __thread int i = 1; void* thread1(void* arg); void* thread2(void* arg); int main() { pthread_t pthread1; pthread_t pthread2; pthread_create(&pthread1, NULL, thread1, NULL); pthread_create(&pthread2, NULL, thread2, NULL); pthread_join(pthread1, NULL); pthread_join(pthread2, NULL); return 0; } void* thread1(void* arg) { cout<<++i<<endl; //輸出 2 return NULL; } void* thread2(void* arg) { sleep(1); //等待thread1完成更新 cout<<++i<<endl; //輸出 2,而不是3 return NULL; }
需要特別解釋的是:__thread是gcc,g++內置的用於多線程編程的基礎設施。用__thread修飾的變量,每個線程都擁有一份實體,相互獨立,互不干擾
最后進入build路徑,執行下面命令:
$ cmake .. $ make $ ../bin/main
轉載自http://blog.csdn.net/world_hope/article/details/50611261