ZBLOG

├── bin ├── CMakeLists.txt ├── lib ├── src │ ├── nty_coroutine.c │ ├── nty_coroutine.h │ ├── nty_epoll.c │ ├── nty_queue.h │ ├── nty_schedule.c │ ├── nty_socket.c │ └── nty_tree.h └── test ├── CMakeLists.txt ├── hook_tcpserve...

你可以按照以下方式修改根目录下的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.12)
project(MyProject)

# 设置输出路径为 ./lib 和 ./bin
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

# 编译并生成动态库和静态库
file(GLOB SRC_SOURCES src/*.c)

foreach(SOURCE_FILE ${SRC_SOURCES})
    # 获取源文件的名称(不包含扩展名)
    get_filename_component(FILE_NAME ${SOURCE_FILE} NAME_WE)
    
    # 生成动态库
    add_library(${FILE_NAME}_shared SHARED ${SOURCE_FILE})
    
    # 生成静态库
    add_library(${FILE_NAME}_static STATIC ${SOURCE_FILE})

    # 设置动态库和静态库的输出路径和名称为 ./lib/lib{FILENAME}.so 和 ./lib/lib{FILENAME}.a
    set_target_properties(${FILE_NAME}_shared PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib")
    set_target_properties(${FILE_NAME}_shared PROPERTIES LIBRARY_OUTPUT_NAME "${FILE_NAME}")
    
    set_target_properties(${FILE_NAME}_static PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib")
    set_target_properties(${FILE_NAME}_static PROPERTIES ARCHIVE_OUTPUT_NAME "${FILE_NAME}")
endforeach()

# 在 test 目录下编译生成可执行文件,并放置到 ./bin 目录下
add_subdirectory(test)

在根目录下创建一个名为 test/CMakeLists.txt 的文件,并添加以下内容:

# 设置测试文件所需的库和链接器
set(TEST_LIBS nty_coroutine_static nty_epoll_static)   # 根据需要添加其他库文件,例如 nty_queue_static, nty_schedule_static, nty_socket_static等

# 编译并生成可执行文件
file(GLOB TEST_SOURCES test/*.c)

foreach(TEST_FILE ${TEST_SOURCES})
    # 获取测试文件的名称(不包含扩展名)
    get_filename_component(TEST_NAME ${TEST_FILE} NAME_WE)
    
    # 生成可执行文件
    add_executable(${TEST_NAME} ${TEST_FILE})

    # 设置可执行文件的输出路径为 ./bin
    set_target_properties(${TEST_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")

    # 链接需要的库和依赖项,例如 pthread 库
    target_link_libraries(${TEST_NAME} PRIVATE ${TEST_LIBS} pthread)
endforeach()

最后,在命令行中执行以下命令进行构建:

mkdir build && cd build   # 创建一个 build 目录并进入其中
cmake ..                  # 在 build 目录下运行 cmake 命令,指向上级目录(包含 CMakeLists.txt 的目录)
make                      # 执行 make 命令进行编译构建

在成功完成构建之后,你会在 ./lib 目录下找到生成的动态库和静态库文件,它们的名称将与对应的源文件名一一对应。同时,在 ./bin 目录下会生成相应的可执行文件。这些可执行文件将链接所需的库文件,并在编译时包含 pthread 库。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=3287

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?