我正在使用 CMAKE 创建具有以下 Visual Studio 解决方案布局:
Solution
+ Project1 (C)
+ Project2 (Fortran)
目标是围绕合并到单个共享库中的 Fortran 例程 (Project2) 创建一个 C 包装器 (Project1)。为此,我需要将 Fortran 项目中生成的 .obj 文件与 C 项目中生成的文件链接起来。这可以使用 OBJECT 库功能(在 CMake 2.8.8 中引入)。详细在这里
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 项目有关。具体来说,无论解决方案配置当前设置为什么(调试 | 发布) ,属性 --> 配置属性 --> C/C++ --> 代码生成下的运行时库设置默认为多线程 DLL 。
这个问题似乎与$<TARGET_OBJECTS:objlib>
表达式的使用有关,因为删除它会导致创建一个 C 项目,该项目会根据解决方案配置正确配置运行时库。
任何人都知道为什么会发生这种情况以及如何修改 CMAKE 文件来纠正它?