CLion 配置杂记
目录
1. JUCE 程序的正确打开方式
JUCE 是一个跨平台 GUI 框架,主要用于音频应用、VST 插件开发等。
JUCE 项目一般通过 GUI 程序 Projucer 创建,项目根目录包含 *.jucer XML 文件,用于记录不同平台 JUCE 库文件位置,JUCE 库目录位置则在 Projucer 中配置。而其跨平台的特性主要通过 Builds 目录下针对不同编译环境的编译文件实现。常见的 JUCE 项目目录结构如下。
├── Builds
│ ├── CLion
│ │ ├── CMakeLists.txt
│ │ └── PkgInfo
│ ├── LinuxMakefile
│ │ └── Makefile
│ └── VisualStudio2019
│ ├── resources.rc
│ ├── *_App.vcxproj
│ ├── *_App.vcxproj.filters
│ └── *.sln
| └── …………
├── JuceLibraryCode
│ ├── AppConfig.h
│ ├── include_juce_audio_basics.cpp
│ ├── include_juce_audio_basics.mm
│ ├── include_juce_audio_devices.cpp
│ ├── include_juce_audio_devices.mm
│ ├── …………
├── Source
│ ├── MainComponent.cpp
│ ├── MainComponent.h
│ └── Main.cpp
└── *.jucer
JUCE 主要支持 Visual Studio、XCode、Code::Blocks 以及 Linux Makefile。由于 CLion 主要使用 CMakeLists.txt 管理项目,新版本 JUCE 为支持 CLion,提供了从 Makefile 或 Code::Blocks 导出 CMakeLists.txt 的功能。
Projucer 提供了从项目生成、管理页面直接打开 IDE 的功能,但直接 CLion 项目会出现问题。 CLion 默认 CMakeLists.txt 位于项目根目录,因此,对于 CMakeLists.txt 位于子目录的项目,需要手动更改 CMake 项目根目录。正确的打开方式做法如下:
- 在 CLion 起始页面,点击
Open。 - 进入要打开的 JUCE 项目的
Builds子目录,打开CLion目录。 - 菜单栏,
Tools | CMake | Change Project Root,选择 JUCE 项目目录即可。
2. Windows 下 Qt 的配置
主要参考这里: https://doc.qt.io/qt-5/cmake-get-started.html。
Linux 平台下 find_package(Qt5) 无需额外配置( Arch Linux 发行版),但在 Windows 下需要手动配置。除了上面链接中介绍的 CMAKE_PREFIX_PATH 等两个方法外,还可以根据 find_package() 的搜索顺序进行配置。
最简单的配置办法即添加 PATH,将对应的 Qt bin 目录添加到 PATH 即可,例如 C:\Qt\5.14.1\msvc2017\_64\bin。
配置完毕后,可能需要根据选择的 Qt 库更换 CLion 工具链。
例如,若默认工具链为 WSL 但这里使用了 Visual Studio MSVC,在不修改默认工具链的情况下,通过 File | Settings | Build, Execution, Deployment | CMake 修改 Toolchain 选项即可。
3. 修改自动生成的 #include guard
主要参考这里: https://www.jetbrains.com/help/clion/header-guards.html。
在 C/C++ 中,因编译特性,头文件可能会被包含多次,为避免编译错误而有了 #include guard。
CLion 默认的 ${INCLUDE_GUARD} 是 ${PROJECT_NAME}_${FILE_NAME}_${EXT},定义在 Settings | Editor | Code Style | C/C++ 的 Naming Convention 选项卡的 Header Guard Style 项。如项目 A 的 b.h 文件,有
#ifndef A_B_H
#define A_B_H
// ......
#endif //A_B_H
如果要修改默认的 ${INCLUDE_GUARD} 为 #pragma once 或其他格式,可以直接在上述位置修改,也可以在 Settings | Editor | File and Code Templates 的 File 中设置 C Header File 或 C++ Class Header。
这里使用的模板为 Apache Velocity。例如,按照后一种做法,若要将 #include guard 修改为 Qt Creator 默认的 ${FILE_NAME}_${EXT},可以设置如下。
#set($GUARD = $NAME.toUpperCase())
#[[#ifndef]]# ${GUARD}_H
#[[#define]]# ${GUARD}_H
// ......
#[[#endif]]# // ${GUARD}_H
这样,项目 A 的 b.h 文件则为
#ifndef B_H
#define B_H
// ......
#endif // B_H