Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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简单配置文件示例 现在我有了一个自己的自己,我想在另一个CGED C++项目中使用它。它就这样存在于我的电脑里 ${MY_LIB_PATH}\include ${MY_LIB_PATH}\lib\x86\debug\lib-files ${MY_LIB_PATH}\lib\x86\release\lib-files ${MY_LIB_PATH}\lib\x64\debug\lib-files ${MY_LIB_PATH}\lib\x64\release\lib-files_C++_Cmake - Fatal编程技术网

cmake简单配置文件示例 现在我有了一个自己的自己,我想在另一个CGED C++项目中使用它。它就这样存在于我的电脑里 ${MY_LIB_PATH}\include ${MY_LIB_PATH}\lib\x86\debug\lib-files ${MY_LIB_PATH}\lib\x86\release\lib-files ${MY_LIB_PATH}\lib\x64\debug\lib-files ${MY_LIB_PATH}\lib\x64\release\lib-files

cmake简单配置文件示例 现在我有了一个自己的自己,我想在另一个CGED C++项目中使用它。它就这样存在于我的电脑里 ${MY_LIB_PATH}\include ${MY_LIB_PATH}\lib\x86\debug\lib-files ${MY_LIB_PATH}\lib\x86\release\lib-files ${MY_LIB_PATH}\lib\x64\debug\lib-files ${MY_LIB_PATH}\lib\x64\release\lib-files,c++,cmake,C++,Cmake,一个基本的配置文件是什么样的,使CMakefind\u package知道这些?我希望它会非常简单,因为它只是没有太多的信息提供 抱歉,我决定复制源代码,所以我不知道应该接受哪个答案。也许这可以稍微轻一点。还有这个或者。最后一个可能是最简单的 希望没有增加更多的痛苦:-) 以下文档应给出大致如下内容(假设您的库是mylib): MyLib/MyLibConfig.cmake.in MyLib/MyLibConfigVersion.cmake.in main MyLib/CMakeLists.tx

一个基本的配置文件是什么样的,使CMake
find\u package
知道这些?我希望它会非常简单,因为它只是没有太多的信息提供

抱歉,我决定复制源代码,所以我不知道应该接受哪个答案。

也许这可以稍微轻一点。还有这个或者。最后一个可能是最简单的

希望没有增加更多的痛苦:-)

以下文档应给出大致如下内容(假设您的库是
mylib
):

MyLib/MyLibConfig.cmake.in MyLib/MyLibConfigVersion.cmake.in main MyLib/CMakeLists.txt 在库的根目录中放置一个“${libname}-config.cmake”

然后在该文件中添加导入的目标

libprotobuf有一个例子

add_library(libprotobuf STATIC IMPORTED GLOBAL)

set_target_properties(libprotobuf PROPERTIES 
    IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/prebuilt/android/${ANDROID_ABI}/libprotobuf.a"
    IMPORTED_LINK_INTERFACE_LIBRARIES "${ZLIB_LIBRARIES};${CMAKE_THREAD_LIBS_INIT}"
    INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/src")
将Env或CMake变量“${libname}\u DIR”设置为“${MY\u LIB\u PATH}”

使用它

find_package(${libname})
#.......
target_link_libraries(main ${libname})

不要自己写配置文件;使用CMake的
export
命令。它太宽泛了,无法在这里全部涵盖,但这里有一个来自我的一个项目的修改示例:

install(TARGETS
        your_target
    EXPORT YourPackageConfig
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
export(TARGETS
        your_target
    NAMESPACE YourPackage::
    FILE "${CMAKE_CURRENT_BINARY_DIR}/YourPackageConfig.cmake"
)
install(EXPORT
        YourPackageConfig
    DESTINATION "${CMAKE_INSTALL_DATADIR}/YourPackage/cmake"
    NAMESPACE YourPackage::
)
这将为您创建配置文件,以便其他项目可以通过
find\u package
使用它

find_package(YourPackage REQUIRED)
target_link_libraries(foo YouprPackage::your_target)

这将自动处理导入的
目标,还允许您嵌入编译器标志,包括路径、库依赖项,甚至哪些文件是接口的一部分(基本上是属于
接口
属性的任何文件)。

您看过了吗?您确定这行得通吗?export命令的手册中说“此命令创建的文件特定于构建树,因此不应安装”。事实上,如果我尝试这样做,我会收到一条错误消息,说“文件…是由export()命令生成的。它可能不是用install()命令安装的”。@GeorgP哪个命令给了你这个问题?
export
${CMAKE\u CURRENT\u BINARY\u DIR}/YourPackageConfig.CMAKE
)创建的文件与正在安装的文件不同(
${CMAKE\u INSTALL\u DATADIR}/YourPackage/CMAKE
)。啊,是的,我错了。但是你的PackageConfig.cmake到底是用来做什么的呢?这个代码段将创建两个文件,都名为
yourpackegeconfig.cmake
,只是在不同的位置。由
export
创建的软件包允许其他软件包使用您的工件,而无需先安装它们,尽管我从未在简短的测试之外使用过它;我发现
make&&makeinstall
更干净,它与我正在使用的任何软件包的更常见用法相匹配。啊,这真是太棒了!这正是我想要实现的,为用户提供这两个选项。但是,如果用户试图在不安装库的情况下使用库,那么他的CMakeList.txt文件会是什么样子呢?相同的?或者他会使用
add_subdirectory
而不是
find_package()?为什么他们会这么糟糕(医生)?Thx btw——简单且有效。另外,我建议使用CMAKE\U CURRENT\U LIST\U DIR而不是CMAKE\U CURRENT\U SOURCE\U DIR,以使此子项目可重新定位。
find_package(${libname})
#.......
target_link_libraries(main ${libname})
install(TARGETS
        your_target
    EXPORT YourPackageConfig
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
export(TARGETS
        your_target
    NAMESPACE YourPackage::
    FILE "${CMAKE_CURRENT_BINARY_DIR}/YourPackageConfig.cmake"
)
install(EXPORT
        YourPackageConfig
    DESTINATION "${CMAKE_INSTALL_DATADIR}/YourPackage/cmake"
    NAMESPACE YourPackage::
)
find_package(YourPackage REQUIRED)
target_link_libraries(foo YouprPackage::your_target)