我有一个CMake构建,它将/ IMPLIB发送到Windows上的链接器。这是我的问题,因为implib的参数与其中一个输入文件的路径相同。 在我看来,当使用Visual Studio构建时,CMake将始终发布/ IMPLIB,并且无法修改传递的参数。 有没有办法控制这种行为?
答案 0 :(得分:3)
查看CMake的来源cmComputeLinkInformation.cxx
,如果设置/implib:...
,则只会添加有效的CMAKE_IMPORT_LIBRARY_SUFFIX
选项:
// Check whether we should use an import library for linking a target. this->UseImportLibrary = this->Makefile->IsDefinitionSet("CMAKE_IMPORT_LIBRARY_SUFFIX");
因此,在以下测试中,导入库已从我的可执行项目的选项中删除:
cmake_minimum_required(VERSION 3.0)
project(NoImpLib CXX)
unset(CMAKE_IMPORT_LIBRARY_SUFFIX)
file(WRITE main.cpp "int main() { return 0; }")
add_executable(${PROJECT_NAME} main.cpp)
VS特定替代方案 - 因为此选项未按其他方式设置/按配置 - 将添加全局属性IgnoreImportLibrary
:
set_target_properties(${PROJECT_NAME} PROPERTIES VS_GLOBAL_IgnoreImportLibrary "true")
答案 1 :(得分:1)
我认为不可能阻止CMake向链接器发出/IMPLIB
选项。
但是,您可以通过设置共享库目标的以下属性来控制生成的导入库的名称:
add_library(foo SHARED foo.cpp)
# set base name of generated DLL import library
set_target_properties(foo PROPERTIES ARCHIVE_OUTPUT_NAME "bar")
# set prefix of generated DLL import library
set_target_properties(foo PROPERTIES IMPORT_PREFIX "")
# set suffix of generated DLL import library
set_target_properties(foo PROPERTIES IMPORT_SUFFIX ".lib")
可以通过设置以下目标属性来调整生成的共享库的名称:
# set base name of generated DLL shared library
set_target_properties(foo PROPERTIES RUNTIME_OUTPUT_NAME "bar")
# set prefix of generated DLL shared library
set_target_properties(foo PROPERTIES PREFIX "")
# set suffix of generated DLL shared library
set_target_properties(foo PROPERTIES SUFFIX ".dll")