CLion 生成CMakeList文件和include文件不存在问题

本文介绍在Clion环境中导入已有项目并解决代码跳转、编译执行等问题的方法。通过正确使用import project功能而非open file,可以自动创建CMakeLists.txt文件。文章还详细说明了如何在CMakeLists中配置include目录,确保头文件的正确引用。

今天导入在Clion上导入了一个其他开发环境下开发的项目,虽然能看得到代码,但是也只能看得到代码了,想要代码跳转,查看声明啥的都看不了,编写错误也不会提示,也不能编译执行。

查找原因原来是没有CmakeList,txt文件,但是代码文件那么多,我也不可能一个一个手配CmakeList,所以就网上找方法....

一.没有CmakeList文件时

找到菜单栏File中的import project导入项目就行,不能用Open File,否则就不会自动创建Cmakelist文件了。如果没有import project选项,就从菜单栏File->Setting->Appearance & Behavior->Menus &Toolbars ->选中Main menu下的File下的File Open Action->点击add after->找到import project后添加。

之后菜单栏File下就有import project了,重新导入项目文件夹,就会提示是否创建覆盖Cmakelist.txt文件,选择要include的文件,点确定就可以有已经配好的Cmakelist了。

二.有Cmakelist时.include 文件路径不存在问题

如果有如下一个文件目录

└─DEMOproject
   └─AFile.h.
   └─2nddictionary
         └─BFile.h
      └─3rddictionary
              └─CFile.h
  └─CMakeLists.txt
  └─DEMOmain.cpp
想要demomain.cpp下include 头文件Afile,BFile,Cfile怎么include?

如果想包含头文件<AFile.h>,必须在Cmakelist中添加:       include_dictionaries(.),不添加这句话想要include根目录下的文件或文件夹都不行。

如果想包含头文件<BFile.h>,必须在Cmakelist中添加          include_dictionaries(2nddictionary),如果不添加这句话,include就必须<2nddictionary/BFile.h>这样写。

同理如果想包含头文件<CFile.h>,必须在Cmakelist中添加      include_dictionaries(2nddictionary/3rddictionary),否则就要include相对路径的形式。

Cmakelist中的include_dictionaries()也就是include目录文件夹,当在代码文件中include文件时,文件会根据include_dictionaries(<目录>)的路径来配对,如果配对后路径中的文件存在则include文件成功,否则会标红。

其实,想要不这么麻烦也行:

在import Project时,选择include所有文件和文件夹,在生成的Cmakelist里再添加 include_dictionaries(.),include 文件不存在问题就不会发生了。

<think>我们已经在Windows系统上使用CLion,现在需要在CMakeLists.txt中添加MySQL的动态链接库。 主要步骤包括: 1. 找到MySQL Connector/C的安装路径(包含includelib目录)。 2. 在CMakeLists.txt中设置头文件目录(include_directories)。 3. 设置链接库目录(link_directories)或者直接指定库文件路径。 4. 将MySQL的库(libmysql.lib或libmysql.dll对应的导入库)链接到目标。 注意:在Windows上,动态链接库在运行时需要对应的DLL(如libmysql.dll)在可执行文件的路径中。 假设MySQL Connector/C安装在默认路径:C:/Program Files/MySQL/MySQL Connector C 6.1 下面是一个配置示例:</think>### 在 Windows 系统下为 CLion 配置 MySQL 动态链接库 #### 完整 CMakeLists.txt 配置 ```cmake cmake_minimum_required(VERSION 3.10) project(YourProjectName) # 设置 C 标准 set(CMAKE_C_STANDARD 11) # 1. 定义 MySQL 路径变量 set(MYSQL_ROOT "C:/Program Files/MySQL/MySQL Connector C 6.1" CACHE PATH "MySQL Connector/C 安装路径") # 2. 包含 MySQL 头文件 include_directories("${MYSQL_ROOT}/include") # 3. 添加可执行文件 add_executable(${PROJECT_NAME} main.c) # 4. 链接 MySQL 动态库 if(WIN32) # 动态链接库配置 target_link_libraries(${PROJECT_NAME} PRIVATE "${MYSQL_ROOT}/lib/libmysql.lib" ) # 5. 构建后自动复制 DLL add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${MYSQL_ROOT}/lib/libmysql.dll" $<TARGET_FILE_DIR:${PROJECT_NAME}> COMMENT "Copying libmysql.dll to output directory" ) endif() ``` #### 配置详解 1. **设置 MySQL 路径** - `set(MYSQL_ROOT ...)` 定义 MySQL Connector/C 安装路径 - `CACHE PATH` 允许在 CLion 的 CMake 配置界面修改此路径 - 默认路径:`C:/Program Files/MySQL/MySQL Connector C 6.1` 2. **包含头文件** - `include_directories` 添加 MySQL 头文件路径 - 确保编译器能找到 `mysql.h` 等头文件 3. **动态链接库配置** - 链接 `libmysql.lib`(动态库的导入库) - 使用完整路径避免链接错误 - `PRIVATE` 作用域确保只影响当前目标 4. **自动复制 DLL** - `add_custom_command` 在构建后自动复制 `libmysql.dll` - `$<TARGET_FILE_DIR:...>` 获取可执行文件输出目录 - 解决运行时 `0xC0000135` 错误 #### 替代方案:使用 find_package(推荐) ```cmake cmake_minimum_required(VERSION 3.10) project(YourProjectName) # 查找 MySQL 开发包 find_package(MySQL REQUIRED) # 添加可执行文件 add_executable(${PROJECT_NAME} main.c) # 链接 MySQL 库 target_link_libraries(${PROJECT_NAME} PRIVATE MySQL::mysqlclient) # Windows 下自动复制 DLL if(WIN32 AND MYSQL_FOUND) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${MySQL_LIB_DIR}/libmysql.dll" $<TARGET_FILE_DIR:${PROJECT_NAME}> ) endif() ``` #### 配置步骤 1. **创建 FindMySQL.cmake**(在项目根目录的 `cmake/` 子目录): ```cmake # FindMySQL.cmake find_path(MySQL_INCLUDE_DIR NAMES mysql.h PATHS "C:/Program Files/MySQL/MySQL Connector C 6.1/include" "C:/Program Files (x86)/MySQL/MySQL Connector C 6.1/include" ) find_library(MySQL_LIBRARY NAMES libmysql mysqlclient PATHS "C:/Program Files/MySQL/MySQL Connector C 6.1/lib" "C:/Program Files (x86)/MySQL/MySQL Connector C 6.1/lib" ) if(MySQL_INCLUDE_DIR AND MySQL_LIBRARY) set(MySQL_FOUND TRUE) set(MySQL_LIB_DIR "${MySQL_LIBRARY}/../") add_library(MySQL::mysqlclient UNKNOWN IMPORTED) set_target_properties(MySQL::mysqlclient PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MySQL_INCLUDE_DIR}" IMPORTED_LOCATION "${MySQL_LIBRARY}" ) endif() ``` 2. **在 CMakeLists.txt 中添加搜索路径**: ```cmake list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") ``` #### 验证配置 在 `main.c` 中添加测试代码: ```c #include <mysql/mysql.h> #include <stdio.h> int main() { printf("MySQL client version: %s\n", mysql_get_client_info()); return 0; } ``` 成功输出示例: ``` MySQL client version: 6.1.11 ``` #### 常见问题解决 1. **路径包含空格问题**: - 使用双引号包裹路径:`"C:/Program Files/..."` - 或使用短路径格式:`C:/Progra~1/MySQL/...` 2. **架构匹配**: - 32位项目 → 链接 `lib/` 目录下的库 - 64位项目 → 链接 `lib/vs14/` 或 `lib64/` 目录下的库 3. **CLion 缓存问题**: - 菜单:File → Invalidate Caches → Invalidate and Restart - 删除 `cmake-build-*` 目录重新生成 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值