Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cmake get find_包以查找包特定的变量_C_Cmake - Fatal编程技术网

cmake get find_包以查找包特定的变量

cmake get find_包以查找包特定的变量,c,cmake,C,Cmake,因此,我想创建一个C库,它的安装方式可以使它在cmake中使用find_package函数的其他项目中易于使用。具体来说,我想要一个项目,比如说foo,可以像这样访问: find_package (foo-1.0 REQUIRED) message ("!-- foo found version \"${FOO_VERSION}\"") message ("!-- foo include path \"${FOO_INCLUDE_DIRS}\"") message ("!-- fo

因此,我想创建一个C库,它的安装方式可以使它在cmake中使用
find_package
函数的其他项目中易于使用。具体来说,我想要一个项目,比如说foo,可以像这样访问:

find_package (foo-1.0 REQUIRED)

message ("!--   foo found version \"${FOO_VERSION}\"")
message ("!--   foo include path \"${FOO_INCLUDE_DIRS}\"")
message ("!--   foo libraries \"${FOO_LIBRARIES}\"")
然后,这些变量可以用于其他cmake项目中的目标,如:

add_executable (example example.c)
target_include_directories (example PRIVATE "${FOO_INCLUDE_DIRS}")
target_link_libraries (example PRIVATE "${FOO_LIBRARIES}")
我的问题是:

  • 静态或共享c库应该以何种方式安装,以便通过
    find_package
    查找(也就是需要什么目的地)
  • 如何公开变量,如
    FOO_库
    ,以便
    find_包
    函数在调用
    find_包
    的项目中公开它们

  • 我知道怎么做了。基本上,您必须在文件中包含
    .cmake.in,作为配置文件的模板和最终包的配置版本文件
    find_package
    将在以下位置查看cmake配置和版本文件:

    ${CMAKE_INSTALL_PREFIX}/include/${LIBKOF_NAMED_VERSION}
    ${CMAKE_INSTALL_PREFIX}/lib/${LIBKOF_NAMED_VERSION}
    
    其中
    LIBKOF\u NAMED\u VERSION
    是包文件夹,例如
    foo-1.2

    libkof
    是我的包的名称,您可以在下面看到这是如何完成的:

    # This cmake is responsible for installing cmake config and other version
    # files.
    
    # This sets the package specific versioning
    set(LIBKOF_MAJOR_VERSION 1)
    set(LIBKOF_MINOR_VERSION 0)
    set(LIBKOF_PATCH_VERSION 0)
    
    # This allows easy creation of the directories within /usr/local or another install
    # prefix
    set(LIBKOF_NAMED_VERSION libkof-${LIBKOF_MAJOR_VERSION}.${LIBKOF_MINOR_VERSION})
    
    # These statements will create the directories needed for installs
    install(DIRECTORY DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${LIBKOF_NAMED_VERSION})
    install(DIRECTORY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/${LIBKOF_NAMED_VERSION})
    
    # This tracks the name of the in files used to generate the package cmake files
    set(LIBKOF_CONFIG_FILE libkof-config.cmake.in)
    set(LIBKOF_CONFIG_VERSION_FILE libkof-config-version.cmake.in)
    
    # The configure_file statements will exchange the variables for the values in this cmake file.
    configure_file(${LIBKOF_CONFIG_FILE} libkof-config.cmake @ONLY)
    configure_file(${LIBKOF_CONFIG_VERSION_FILE} libkof-config-version.cmake @ONLY)
    
    # Installs to the output locations so they can be found with find_package()
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libkof-config-version.cmake DESTINATION include/${LIBKOF_NAMED_VERSION})
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libkof-config.cmake DESTINATION lib/${LIBKOF_NAMED_VERSION})
    

    您询问如何在CMake中打包项目,但您的代码没有显示打包尝试。你读过关于这个主题的一些教程吗?例如,CMake官方网站上的一个:@Tsyvarev谢谢,我不知道有关于包装的具体指南,我以前只看过每个功能指南