【发布时间】: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)。
这个问题似乎与$<TARGET_OBJECTS:objlib> 表达式的使用有关,因为删除它会导致创建一个基于解决方案配置正确配置运行时库的 C 项目。
任何人都知道为什么会发生这种情况以及如何修改 CMAKE 文件来纠正它?
【问题讨论】:
标签: c++ c visual-studio cmake