gn中的libs和deps有什么区别

BUILD.gn

    libs = [
       "pthread_static.lib",
    ]
    deps = [
      ":pthread_static",
    ]

这里面的libs和deps里的pthread_static有什么区别,用cmake的话该怎么写?

gn中的libs和deps有以下区别:

  1. libs定义的是链接到目标的静态库文件,相当于cmake中的target_link_libraries。
  2. deps定义的是目标的依赖关系,相当于cmake中的add_dependencies。
  3. libs里面填写的都是静态库的文件名,而deps里面填写的都是目标名。
  4. libs主要影响链接,deps主要影响编译顺序。
    换成cmake的写法如下:
    cmake
    add_library(pthread_static STATIC pthread_static.c)

add_executable(myapp main.c)

target_link_libraries(myapp pthread_static)

add_dependencies(myapp pthread_static)
所以libs定义了myapp链接静态库pthread_static,deps定义了myapp依赖目标pthread_static。
总结:

  • libs用于链接静态库文件
  • deps用于定义目标依赖关系控制编译顺序
  • cmake中分别用target_link_libraries和add_dependencies实现相同功能