【问题标题】:CMake: Visual Studio Project Created Using OBJECT Library FeatureCMake:使用 OBJECT 库功能创建的 Visual Studio 项目
【发布时间】:2013-08-23 19:43:53
【问题描述】:

我正在使用 CMAKE 创建具有以下 Visual Studio 解决方案布局:

Solution  
    + Project1 (C)  
    + Project2 (Fortran)

目标是围绕 Fortran 例程 (Project2) 创建一个 C 包装器 (Project1),并将其组合成一个共享库。为此,我需要将 Fortran 项目中生成的 .obj 文件与 C 项目中生成的文件链接起来。这可以使用 OBJECT 库功能(在 CMake 2.8.8 中引入)。 Detailed here

Project1 创建共享库,Project2 创建 .obj 文件。

在我使用的 Project1 的 CMakeLists.txt 中:

ADD_LIBRARY(lib1${lib1_src} $<TARGET_OBJECTS:lib2>)

在我使用的 Project2 的 CMakeLists.txt 中:

ADD_LIBRARY(lib2 OBJECT ${lib2_src})

在我使用的解决方案的 CMakeLists.txt 中:

cmake_minimum_required(VERSION 2.8.8)

PROJECT (Test)

ENABLE_LANGUAGE (C)
ENABLE_LANGUAGE (Fortran)

SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

INCLUDE_DIRECTORIES(project1)
INCLUDE_DIRECTORIES(project2)

ADD_SUBDIRECTORY(project1) 
ADD_SUBDIRECTORY(project2)`

我遇到的问题与 CMake 生成的 C 项目有关。具体来说,Properties --> Configuration Properties --> C/C++ --> Code Generation下的Runtime Library设置默认为Multi-threaded DLL,不管是什么解决方案配置当前设置为 (Debug | Release)。

这个问题似乎与$&lt;TARGET_OBJECTS:objlib&gt; 表达式的使用有关,因为删除它会导致创建一个基于解决方案配置正确配置运行时库的 C 项目。

任何人都知道为什么会发生这种情况以及如何修改 CMAKE 文件来纠正它?

【问题讨论】:

    标签: c++ c visual-studio cmake


    【解决方案1】:

    我能够通过添加第三个项目来解决这个问题,该项目将 .obj 文件聚合到一个共享库中。

    Solution  
        + Project1 (C)  
        + Project2 (Fortran)
        + Project3 (SharedLib)
    

    在我使用的 Project1 的 CMakeLists.txt 中:

    ADD_LIBRARY(lib1 OBJECT ${lib1_src})
    

    在我使用的 Project2 的 CMakeLists.txt 中:

    ADD_LIBRARY(lib2 OBJECT ${lib2_src})
    

    在我使用的 Project3 的 CMakeLists.txt 中:

    ADD_LIBRARY(libName SHARED $<TARGET_OBJECTS:Project1> $<TARGET_OBJECTS:Project2>)
    

    【讨论】:

      猜你喜欢
      • 2018-03-26
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      相关资源
      最近更新 更多