CMake:使用OBJECT库功能创建的Visual Studio项目

时间:2013-08-23 19:43:54

标签: c++ c visual-studio cmake

我正在使用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项目有关。具体而言,属性 - &gt;下的运行时库设置配置属性 - &gt; C / C ++ - &gt;无论解决方案配置当前设置为什么(Debug | Release),代码生成都默认为多线程DLL

Improper Configuration

这个问题似乎与使用$<TARGET_OBJECTS:objlib>表达式有关,因为删除它会导致创建一个C Project,根据解决方案配置正确配置运行时库。

Proper Configuration

任何人都知道为什么会这样,以及我如何修改CMAKE文件来纠正它?

1 个答案:

答案 0 :(得分:0)

我能够通过添加第3个项目来解决问题,该项目将.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>)