10min programming

来源:互联网 发布:淘宝能在1688 编辑:程序博客网 时间:2024/06/05 03:03
8. opengl 测试

最简单的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})


pacakge 名就是 OpenCV,不加版本号...

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})


主程序,命名为 app

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


但是生成的两个 makefile 几乎是一样的,最后为什么会一个是Debug,一个是 Release?


gdb

breakpoint mainrunn...


1.  write a 'hello world' program

linux + vim + qmake

qt main:


.pro file:


qmakemake


replace qmake with cmake. cmake script follows








0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 现在性价比比较高的手机 性价比高的紧凑型suv排行榜 性价比高的平板推荐 性比价是什么意思 性价 哪个牌子的表性价比高 什么马桶好用性价比高 电脑哪个牌子性价比高 婴儿推车哪个性价比高 哪个牌子电脑性价比高 三星哪款手机性价比高 现在那些手机性价比高 哪个品牌空调性价比高 哪个牌子的拉杆箱性价比高 瓷砖哪个牌子的性价比比较好 什么牌子的羽毛球拍性价比高 什么牌子的蓝牙耳机性价比高 男士钱包什么牌子性价比高 抽油烟机哪个牌子性价比高 液晶电视什么牌子性价比高 哪个牌子的油烟机性价比高 森海塞尔哪款耳机性价比高 哪个牌子的平板性价比高 蓝牙耳机什么牌子性价比高 什么牌子的充电宝性价比高 哪个牌子的按摩椅性价比高 机械键盘什么牌子性价比高 什么牌子台式电脑性价比高 哪个牌子的电动车性价比高 什么牌子的机械键盘性价比高 跑步机哪个牌子的性价比高 现在买什么电视性价比高 哪个牌子的粉底液性价比高 thinkpad哪个系列性价比高 什么牌子的平板电脑性价比高 什么牌子固态硬盘性价比高 哪个牌子的羽绒服性价比高 整体橱柜什么牌子性价比高 哪个牌子的微波炉性价比高 法国性大片在线播放联合传播 性传播疾病专科