用CMake编译和链接子项目库

用户名

我有2个项目(prj1和prj2)。一个(prj2)依赖于另一个(prj1)是静态库。我到达时用CMake分别编译它们。

但是我需要将一个(prj1)集成到另一个(prj2)。因此,我希望CMake在其他(prj2)之前先编译静态库(prj1),然后链接该静态库。我尝试了一些操作,但id无效。

在prj2中,externals / core是git子模块(对于非git用户,您可以将此目录视为prj1的复制粘贴)。我在prj2“ SDL2”中尝试了此CMakeLists.txt(但没有成功):

cmake_minimum_required(VERSION 2.8)


if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
    "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  set(CMAKE_CXX_FLAGS       "-Wall -Wextra -Wformat=2 -Wpedantic -D_FORTIFY_SOURCE=2")
  set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  # TODO
endif()

set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
# if (CMAKE_VERSION VERSION_LESS "3.1")
#   if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR
#       CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
#     set (CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
#   endif()
# else()
#   set(CMAKE_CXX_STANDARD 11)
# endif()

project(PlanetWars2dRT-SDL2)

# Version number
set(VERSION_MAJOR "0")
set(VERSION_MINOR "0")
set(VERSION_MICRO "0")

# Configure a header file to pass some of the CMake settings
# to the source code.
configure_file (
  "src/compilation_config.h.in"
  "${PROJECT_BINARY_DIR}/compilation_config.h"
  )
# Add the binary tree to the search path for include files
# so that we will find compilation_config.h
include_directories("${PROJECT_BINARY_DIR}")

set(LIBRARY_OUTPUT_PATH    lib/${CMAKE_BUILD_TYPE})
set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE})

include_directories(src/)
file(
  GLOB_RECURSE
  source_files
  src/*
  )
add_executable(planet-wars-2d-rt-sdl2 ${source_files})

#include(ExternalProject)
#ExternalProject_Add(PlanetWars2dRT PREFIX externals/core/)
include_directories(externals/core/src/utils/ externals/core/src/specific/)
add_subdirectory(externals/core/)
#find_package(PlanetWars2dRT-core REQUIRED)

include(FindPkgConfig)
pkg_search_module(SDL2 REQUIRED sdl2)
pkg_search_module(SDL2GFX REQUIRED SDL2_gfx)
include_directories(${SDL2_INCLUDE_DIRS} ${SDL2IMAGE_INCLUDE_DIRS})
target_link_libraries(
  planet-wars-2d-rt-sdl2
  planet-wars-2d-rt-core
  ${SDL2_LIBRARIES} ${SDL2GFX_LIBRARIES}
  )

那是prj2树的简化版本:

.
├── build (with CMake stuff generated with "cmake ..")
├── CMakeLists.txt
├── externals
│   └── core
│       ├── build (with CMake stuff generated with "cmake ..")
│       ├── CMakeLists.txt
│       ├── makefile
│       └── src
├── makefile
├── README.md
└── src
    ├── compilation_config.h.in
    └── planet-wars-2d-rt-sdl2.cpp

如何使用CMake编译prj2“ SDL2”中的prj1“ core”库,然后将prj1的库与prj2(再次使用CMake)链接?

如果您的解决方案不适用于非GNU / Linux操作系统,则不是大问题。注意:我的PC在Debian GNU / Linux 8“ Jessie”上运行。

问候。

用户名

两个项目都有一个文件“ compilation_config.h”。在编译时,出错了,所以编译失败,因为所使用的代码#include "compilation_config.h"含糊不清。

因此,我在两个项目中都创建了一个“ include / project-name”目录,并更改了包含路径:“ prj1 / compilation_config.h”或“ prj2 / compilation_config.h”。由于这一点,不再存在歧义,因此现在可以使用!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用cmake创建主项目和子项目,并能够分别编译它们

来自分类Dev

将公共库与多个子项目链接

来自分类Dev

通过CMake添加子项目

来自分类Dev

在sbt中编译子项目

来自分类Dev

年级子项目和依赖项

来自分类Dev

CMake:根据其他人的子项目标头构建子项目

来自分类Dev

CMake:根据其他人的子项目标头构建子项目

来自分类Dev

Gradle子项目不会依赖于其他子项目进行编译

来自分类Dev

Cmake:将子项目目标导出到主项目

来自分类Dev

带有独立子项目的CMake项目

来自分类Dev

将非C ++子项目集成到CMake项目

来自分类Dev

子项目的Docker项目管理通过符号链接

来自分类Dev

错误和无法将本地离子项目推送到私有github存储库

来自分类Dev

错误和无法将本地离子项目推送到私有github存储库

来自分类Dev

用Git替代发送tarball和要求将补丁发送回子项目?

来自分类Dev

用Git替代发送tarball和要求将补丁发送回子项目吗?

来自分类Dev

如何使用根库打包子项目库

来自分类Dev

在cmake中包含相邻子项目的使用

来自分类Dev

如何避免cmake子项目中的名称冲突?

来自分类Dev

在凿子项目模板中编译凿子源文件

来自分类Dev

Gradle 显示子项目的编译配置内容

来自分类Dev

列表视图控件中的项目和子项目

来自分类Dev

LINQ选择不同的项目和子项目

来自分类Dev

JavaScript创建项目符号和子项目符号

来自分类Dev

JavaScript创建项目符号和子项目符号

来自分类Dev

Play子项目中外部库的路径错误

来自分类Dev

用于离子项目的最佳数据库

来自分类Dev

带有数据库的离子项目

来自分类Dev

在电子项目中包括BItcoinJS库

Related 相关文章

热门标签

归档