Clion编译时,Cmake子目录能构建库,但父目录构建项目时出现的问题却来自子目录

出问题的文件来自MemClickhouse目录下的MemClickhouse.h文件,出错的位置是:

#include "clickhouse/client.h"

报错的原因是找不到这个头文件,但是在子目录的cmake文件中,已经包含了这个头文件所在的路径:

add_library(${PROJECT_NAME} ${DIR_SRCS})

target_include_directories(${PROJECT_NAME} PRIVATE contribs/clickhouse-cpp/ contribs/clickhouse-cpp/contrib/absl)

target_link_libraries(${PROJECT_NAME} clickhouse-cpp-lib)

上面第二行就包含了这个头文件的路径,

当我用子目录的cmake文件单独构建这个子目录的时候,就能够正常生成我要的库文件。但是在父目录link这个库的时候,在MemClickhouse.h文件中却又会报错?

让我们看看父目录中的cmake是怎么写的:

cmake_minimum_required(VERSION 3.16)
project(Kline)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -pthread")

SET (MyDeps "/home/mydeps")

SET(INCS ${MyDeps}/include)
SET(LNKS ${MyDeps}/lib)

SET(LIBS
    MemClickhouse
)


INCLUDE_DIRECTORIES(${INCS})
LINK_DIRECTORIES(${LNKS})

add_executable(Kline
        app.cpp
        RunTrader/PsiSubRunner.cpp
        Time/time.cpp)

TARGET_LINK_LIBRARIES(Kline ${LIBS})

正常的链接了MemClickhouse库文件,看似没什么问题,但实际上由于我是使用Clion来构建的,Clion构建的库并不会放在MemClickhouse目录下,而是在cmake-build-debug目录下,所以下面的cmake代码找不到实际的库文件,所以父目录的cmake在构建时会根据头文件去构建,而不是库文件。

SET(LIBS
    MemClickhouse
)

子目录的cmake是有告诉编译器去哪里找依赖的头文件的,但父目录不知道,因此就出现了文章一开头说明的错误。

其实这就是clion的问题,子目录构建的库的位置导致了父目录的cmake找不到库文件,所以在父目录的cmake文件加上这一行

add_subdirectory(MemClickhouse)

添加子目录,这样在构建时,就能找到所需库文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值