Skip to main content

Command Palette

Search for a command to run...

现代cmake使用技巧

Updated
1 min read

不要再用nmake/make了,直接使用—build/—install吧,也不需要特意定义CMAKE_BUILD_TYPE,非常方便

#编译
cmake --build . --config Debug/Release
#安装,将安装到CMAKE_INSTALL_PREFIX下,默认是安装Release配置
cmake --install . --config Debug/Release

环境变量,设定好后就是全局可用,不会因为add_subdirectory而变化,在多级的子项目时尤其好用:

set(ENV{PROJ_BASE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

带缓存的PATH变量,可让Visual Studio/CMake GUI等工具有一个可选择文件夹路径的变量,并保存在缓存中,非常方便编辑:

set(OPENCV_DIR $ENV{OPENCV_ROOT} CACHE PATH "Root path of opencv")
    if(DEFINED OPENCV_DIR)
        list(APPEND CMAKE_PREFIX_PATH ${OPENCV_DIR})
    endif()

设置exe/dll/pdb文件输出路径:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $ENV{PROJ_OUTPUT_DIR}/out)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $ENV{PROJ_OUTPUT_DIR}/out)
set(CMAKE_PDB_OUTPUT_DIRECTORY $ENV{PROJ_OUTPUT_DIR}/pdbs)

使用file命令的GLOB_RECURSE,子目录下的源文件也能一并扫描出来:

file(GLOB_RECURSE SRC_CPP ${PROJECT_SOURCE_DIR} *cpp)

使用target_compile_definitions给代码定义#define,子项目的DLL和EXE区别对待,其中,PRIVATE只应用于编译本项目时有效,PUBLIC应用于全局(所有子项目共享):

#For DLL
target_compile_definitions(foo PRIVATE API_EXPORT_BUILD)
#For EXE
target_compile_definitions(bar PRIVATE API_EXPORT)

More from this blog

解决QWidget用winId获取HWND而导致Qt程序无事件消息的问题

问题原因: 当对一个QWidget调用winId时,默认情况下,Qt会对该窗口进行Native化,从而导致如鼠标等事件被其它原生窗口接管,表现出来的现像就是窗口不响应任何事件 解决思路: 防止Qt窗口Native化 解决办法: 第一步,在创建QApplication对象之前设置: QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); //注意:Qt::AA_NativeWindows受环境变量 QT_USE_NATI...

Jul 7, 20251 min read

解决因OpenGL渲染窗口高宽比导致图形变形

在 OpenGL 中,由于窗口的 宽高比(aspect ratio) 与绘制内容的坐标系统不一致,图像会出现拉伸、压缩等变形现象。为了解决这个问题,可根据窗口的大小调整投影矩阵,确保图像在视觉上保持原始比例。 先通过glViewPort调整视口 void resizeGL(int w, int h) { glViewport(0, 0, w, h); } 再根据窗口高宽比,计算出合适的投影矩阵,这样体现出来的样式,就是截掉了宽高比之外的内容,显示的内容不变形,正圆就是正圆,不会被拉伸成...

Jun 18, 20251 min read

雷的部落格威力缩小版

29 posts

雷的部落格威力缩小版