10min programming
来源:互联网 发布:淘宝能在1688 编辑:程序博客网 时间:2024/06/05 03:03
最简单的opengl程序,简单到什么都不显示。glut负责opengl的窗口管理,greeglut是glut的一个实现,官方的实现已经不再更新了,现在基本上都用freeglut。
#include<GL/freeglut.h>int main(int argc, char** argv){glutInit(&argc, argv);glutMainLoop();return 0;}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.11)project(gl_test)find_package(GLUT REQUIRED)add_executable(${PROJECT_NAME} main.cpp)target_include_directories(${PROJECT_NAME} PUBLIC ${GLUT_INCLUDE_DIR})target_link_libraries(${PROJECT_NAME} ${GLUT_LIBRARIES})
7. BLAS(ATLAS)+cmake
用到cblas的测试程序。ATLAS是BLAS的一个实现。
#include<iostream>#include<cblas.h>int main(int argc, char** argv){ double a[3] = {1.0, 2.0, 3.0}; double b[3] = {4.0, 5.0, 6.0}; double c = cblas_ddot(3, a, 1, b, 1); std::cout<<"get "<<c<<std::endl; return 0;}
cmake_minimum_required(VERSION 2.8.11)project(atlas_test)find_package(BLAS REQUIRED)add_executable(${PROJECT_NAME} main.cpp)target_include_directories(${PROJECT_NAME} PUBLIC ${ATLAS_INCLUDE_DIR})target_link_libraries(${PROJECT_NAME} ${BLAS_atlas_LIBRARY} ${BLAS_f77blas_LIBRARY} /usr/lib/libblas.so)
cmake自带的find模块没能找到 libblas.so ,要手动加进去
6. opencv3+cmake
opencv3 sample main.cpp
#include<iostream>#include<opencv2/opencv.hpp>int main(int argc, char** argv){ if(argc < 2){ std::cout << "usage: command [your_image_file]" << std::endl; } cv::Mat img=cv::imread(argv[1]); if(!img.data){ std::cout<<"No image data"<<std::endl; return -1; } cv::namedWindow("ImgWin"); cv::imshow("ImgWin", img); cv::waitKey(0); return 0;}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.11)project(opencv3_test)find_package(OpenCV REQUIRED)include_directories( ${OpenCV_INCLUDE_DIRS})add_executable( ${PROJECT_NAME} main.cpp )target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
5. qt5+cmake
CMakeLists.txt
需要两个set, 在target_link_libraries添加Qt5::<ModuelName>, 不用添加 target_include_directories(...)
cmake_minimum_required(VERSION 2.8.11)project(qt5_cmake)set(CMAKE_INCLUDE_CRUURENT_DIR ON)set(CMAKE_AUTOMOC ON)# find_package(Qt5 REQUIRED COMPONENTS Widgets)find_package(Qt5Widgets REQUIRED)add_executable(${PROJECT_NAME} main.cpp)target_link_libraries(${PROJECT_NAME} Qt5::Widgets)
简单的 main.cpp
#include <QApplication>#include <QMainWindow>int main(int argc, char** argv){QApplication app(argc, argv);QMainWindow mainWin;mainWin.show();return app.exec();}
4. call the C++ function in a library from python
如果是只调用函数,不涉及类,可以ctypes, 参考
http://stackoverflow.com/questions/23724417/how-to-call-c-functions-of-a-class-from-a-python
http://stackoverflow.com/questions/145270/calling-c-c-from-python
from ctypes import *cpp_test_lib_func =cdll.LoadLibrary('../test_lib/libtest_lib.so').test_lib_funccpp_test_lib_func()
使用boost
借助 boost.python 从python调用c++,首先要用BOOST_PYTHON_MODULE指定导出的包名等,然后编译时链接 boost.python 库,就可以在python里直接使用了。
#include "test_lib.h"#include <iostream>#include <boost/python.hpp>void test_lib_func(void){std::cout<< "hello, test_lib func" << std::endl;return;}BOOST_PYTHON_MODULE(test_lib){boost::python::def("test_lib_func", test_lib_func);}可以参考 http://stackoverflow.com/questions/5851016/boost-python-and-cmake-link-and-load-errors?rq=1
使用SWIG?
http://www.swig.org/Doc3.0/Python.html#Python_nn2
3. write a program + a library and use cmake to configure
首先写库文件,将库命名为 test_lib
test_lib.h
#ifndef TEST_LIB_H#define TEST_LIB_Hvoid test_lib_func(void);#endif
test_lib.cpp
#include "test_lib.h"#include <iostream>void test_lib_func(void){ std::cout<< "hello, test_lib func" << std::endl; return;}test_lib 中的 CMakeLists.txt
cmake_minimum_required(VERSION 2.8.11)add_library(test_lib test_lib.h test_lib.cpp)test_lib中的 test_libConfig.txt
set( test_lib_FOUND TRUE )find_path(test_lib_INCLUDES test_lib.h PATHS ${test_lib_DIR}) find_library(test_lib_LIB test_libPATHS ${test_lib_DIR})
main.cpp
#include <iostream>#include "test_lib.h"int main( void ){ std::cout << "Test" << std::endl; test_lib_func(); // test function in test_lib library return 0;}
app中的CMakeLists.txt
cmake_minimum_required(VERSION 2.8.11)project(app)find_package( test_lib REQUIREDPATHS ../test_lib)add_executable(app main.cpp ${test_lib_INCLUDES}/test_lib.h)target_include_directories(app PUBLIC ${test_lib_INCLUDES})target_link_libraries(app ${test_lib_LIB})
在编写的时候要注意的地方:
a. target_include_directories 和 include_libraries 不同的是 scope 不同,前者只对target,后者的scope是后面以及子文件夹中的部分
b. 在用到变量引用时,要使用${变量}
c. 在find_package处理中使用find_path和find_library分别寻找包含目录和库文件
另外在 add_library(...) 函数中添加关键词 SHARED 可以生成动态链接库
linux 只能在环境变量和编程时设置的路径里找动态链接库.so?
2. separate Debug and Release build folder
dir
--src
--build
----Debug
----Release
run_cmake.sh
cd ./build/Debugcmake -DCMAKE_BUILD_TYPE=Debug ../../srccd ../Releasecmake -DCMAKE_BUILD_TYPE=Release ../../src
gdb
breakpoint mainrunn...
1. write a 'hello world' program
linux + vim + qmake
qt main:
.pro file:
qmakemake
replace qmake with cmake. cmake script follows
- 10min programming
- Generic<Programming>: 再谈Min和Max
- Programming Question-5-Dijkstra Algorithm via Min-Heap (including Notes)
- 10min了解ContentProvider
- min
- min
- min
- 10min初识观察者模式
- Top 10 Programming Fonts
- Top 10 Programming Fonts
- Top 10 Programming Fonts
- TOP 10 PROGRAMMING FONTS
- programming
- programming
- Programming
- min=(min++)%60
- Min-Min算法实现
- HDU 2007'10 Programming Contest_WarmUp
- Android使用SimpleAdapter
- 总结CSS3变形transform属性
- AFNetworking《二》理解NSOperation (Demo笔记)
- Excel Sheet Column Number
- UVALive 6835 - Space Golf
- 10min programming
- openjudge集合问题
- Sublime Text 全程指南
- 第一个Android用例
- [Javascript Data Structures] 二分查找 Binary Search
- HTML5 Cookie总结
- 黑马程序员——java基础---集合--迭代
- Web Services 指南之:Web Services 的组件
- Conclusion for Resource Management