【问题标题】:Cmake add external project?Cmake添加外部项目?
【发布时间】:2020-09-17 20:30:36
【问题描述】:

我不完全确定 externalproject_Add 是否作为我能找到的大多数示例都是关于下载 git 等/但也许就是这样......

基本上我有:

FolderA // inherited project
> main.cpp
> CMakeList.txt
    > libFolder
        >someStuff.h
        >someStuff.cpp

FolderB // base project
> main.cpp
> CMakeList.txt
    > libFolder_Core
        >someStuff_Core.h
        >someStuff_Core.cpp

我想“不”每次我对文件夹B中的项目进行更改时都必须构建静态/动态/等库,我只想在我的文件夹A中包含该文件夹中的CMakeList.txt,FolerB cmake只有一些东西喜欢

set(headers xx.h)
set(source xx.cpp)
set(all ${headers} ${source})

只是在projectA,cmake中找方法说,

get_filename_component(libs"${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE)
SET(coreLib ${libs}/someCoreLib/)
add_executable(name, main.cpp ${coreLib})

这样的事情可能吗?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    您可以使用导出的目标通过现代 CMake 轻松做到这一点。

    在项目 A 中:

    add_library(projecta a.cpp b.cpp c.cpp)
    add_library(projecta::projecta ALIAS projecta)
    
    target_include_directories(projecta PUBLIC ...)
    
    install(TARGETS projecta EXPORT projectaTargets
      LIBRARY DESTINATION lib
      ARCHIVE DESTINATION lib
      RUNTIME DESTINATION bin
      INCLUDES DESTINATION include
    )
        
    install(
      EXPORT projectaTargets
      NAMESPACE projecta::
      FILE projectaConfig.cmake
      DESTINATION lib/cmake/projecta
    )
    
    export(
        EXPORT projectaTargets
        FILE "${CMAKE_CURRENT_BINARY_DIR}/projectaConfig.cmake"
    )
    

    这将为projecta 创建一个目标并导出目标以供其他项目使用。

    如果项目 A 本身有依赖项,请考虑将目标导出到目标文件,然后生成一个配置文件,该文件也可以找到您的依赖项的包。更多信息请参见 It's Time To Do CMake Right 博文。

    只需在命令行的CMake模块路径中添加你的构建目录的路径:-DCMAKE_PREFIX_PATH=/path/to/projecta/build

    那么,在项目B中:

    find_package(projecta REQUIRED)
    
    add_executable(projectb x.cpp y.cpp z.cpp)
    
    # link project b to project a,
    # adding include directories and link dependencies
    target_link_libraries(projectb PUBLIC projecta::projecta)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多