Clion编译Libuv
起因
Vs2019在编译的Libuv时候,莫名其妙的一直在报错,原先是没问题的.怀疑是不是更新VS出的问题的.Clion更多的还是学习Rust的时候才使用的.没有通过Clion编译过开源项目.这里采用比较笨的方式. 具体可以查看这篇: libuv编译- 新建一个c语言的项目
- 将libuv的源码放入当前项目中
- 从libuv的CMakeLists.txt拷入部分
1. 源码组织

这里将源码放入到项目中,主要是为了学习和调试方便的.
2. Cmake的配置
从libuv的CmakeLists.txt 拷入需要的配置信息:cmake_minimum_required(VERSION 3.15)
project(mylibuv C)
set(CMAKE_C_STANDARD 99)
#指定libuv的所在目录
set(UV 3rd/uv)
#指定libuv所需的头文件目录
include_directories(${UV}/include ${UV}/src)
#libuv 通用源文件或者说支持平台的源文件
set(uv_sources
${UV}/src/fs-poll.c
${UV}/src/idna.c
${UV}/src/inet.c
${UV}/src/random.c
${UV}/src/strscpy.c
${UV}/src/threadpool.c
${UV}/src/timer.c
${UV}/src/uv-common.c
${UV}/src/uv-data-getter-setters.c
${UV}/src/version.c)
#libuv 在windows的源文件
if(WIN32)
list(APPEND uv_defines WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0600)
#libuv编译时,需要链接的静态库
list(APPEND uv_libraries
psapi
iphlpapi
userenv
ws2_32)
list(APPEND uv_sources
${UV}/src/win/async.c
${UV}/src/win/core.c
${UV}/src/win/detect-wakeup.c
${UV}/src/win/dl.c
${UV}/src/win/error.c
${UV}/src/win/fs.c
${UV}/src/win/fs-event.c
${UV}/src/win/getaddrinfo.c
${UV}/src/win/getnameinfo.c
${UV}/src/win/handle.c
${UV}/src/win/loop-watcher.c
${UV}/src/win/pipe.c
${UV}/src/win/thread.c
${UV}/src/win/poll.c
${UV}/src/win/process.c
${UV}/src/win/process-stdio.c
${UV}/src/win/signal.c
${UV}/src/win/snprintf.c
${UV}/src/win/stream.c
${UV}/src/win/tcp.c
${UV}/src/win/tty.c
${UV}/src/win/udp.c
${UV}/src/win/util.c
${UV}/src/win/winapi.c
${UV}/src/win/winsock.c)
list(APPEND uv_test_libraries ws2_32)
list(APPEND uv_test_sources ${UV}/src/win/snprintf.c test/runner-win.c)
endif()
add_library(uv SHARED ${uv_sources})
target_compile_definitions(uv
INTERFACE
USING_UV_SHARED=1
PRIVATE
BUILDING_UV_SHARED=1
${uv_defines})
target_compile_options(uv PRIVATE ${uv_cflags})
target_include_directories(uv
PUBLIC
{content}lt;BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
{content}lt;INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
PRIVATE
{content}lt;BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
link_libraries(psapi
iphlpapi
userenv
ws2_32)
target_link_libraries(uv ${uv_libraries})
add_executable(mylibuv main.c ${uv_sources})
3. 运行demo
int main(int argc,char* argv[])
{
printf("hello world!\n");
uv_loop_t* loop = uv_default_loop();
printf("Now quitting.\n");
uv_run(loop,UV_RUN_DEFAULT);
uv_loop_close(loop);
free(loop);
return 0;
}
后来发现并不是VS2019的问题,有可能是调试源码的时候,改动头文件,造成编译不通过的
秋风
2020-08-23