Visual c++ 让CMake为MSVC构建共享库 我在Cube中使用UNIX环境构建C和C++项目。然而,我也想开始在MSVC中编译,我正试图了解cmake文档,但我被卡住了。 当我尝试构建时,我不断收到以下消息
链接:致命错误LNK1104:无法打开文件“Debug\MyLibrary.lib”[C:\sandbox\projects\cpp\DummyChelloWorld\build\ma inProgram.vcxproj] 你能告诉我我做错了什么吗 CMakeLists.txtVisual c++ 让CMake为MSVC构建共享库 我在Cube中使用UNIX环境构建C和C++项目。然而,我也想开始在MSVC中编译,我正试图了解cmake文档,但我被卡住了。 当我尝试构建时,我不断收到以下消息,visual-c++,cmake,Visual C++,Cmake,链接:致命错误LNK1104:无法打开文件“Debug\MyLibrary.lib”[C:\sandbox\projects\cpp\DummyChelloWorld\build\ma inProgram.vcxproj] 你能告诉我我做错了什么吗 CMakeLists.txt cmake_minimum_required(VERSION 3.4) project(helloWorld) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -
cmake_minimum_required(VERSION 3.4)
project(helloWorld)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include(GenerateExportHeader)
ADD_LIBRARY(MyLibrary SHARED myShared.cpp)
set(SOURCE_FILES main.cpp)
GENERATE_EXPORT_HEADER( MyLibrary
BASE_NAME MyLibrary
EXPORT_MACRO_NAME MyLibrary_EXPORT
EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/MyLibrary_Export.h
STATIC_DEFINE MyLibrary_BUILT_AS_STATIC
)
add_executable(mainProgram ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(mainProgram MyLibrary)
TARGET_INCLUDE_DIRECTORIES(mainProgram PUBLIC exports)
main.cpp
#include "myShared.h"
int main() {
sayHI();
return 0;
}
myShared.cpp
#include <iostream>
#include "myShared.h"
using namespace std;
void sayHI() {
cout << "Hello World lib" << endl;
}
把我的评论变成答案
对于CMake版本>=3.4
只需使用:
用于CMake版本<3.4
您需要声明导出的函数/符号。因此,在您的情况下,您必须修改以下文件:
myShared.h
#ifndef HELLOWORLD_HELLO_H
#define HELLOWORLD_HELLO_H
#include "MyLibrary_Export.h"
void MyLibrary_EXPORT sayHI();
#endif //HELLOWORLD_HELLO_H
CMakeLists.txt
cmake_minimum_required(VERSION 3.4)
project(helloWorld)
set(CMAKE_CXX_STANDARD 11)
include(GenerateExportHeader)
add_library(
MyLibrary
SHARED
myShared.cpp
myShared.h
MyLibrary_Export.h
)
GENERATE_EXPORT_HEADER(
MyLibrary
BASE_NAME MyLibrary
EXPORT_MACRO_NAME MyLibrary_EXPORT
EXPORT_FILE_NAME MyLibrary_Export.h
STATIC_DEFINE MyLibrary_BUILT_AS_STATIC
)
target_include_directories(MyLibrary PUBLIC "${CMAKE_CURRENT_BINARY_DIR}")
set(SOURCE_FILES main.cpp)
add_executable(mainProgram ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(mainProgram MyLibrary)
我已经
MyLibrary\u EXPORT
CMake\u WINDOWS\u导出\u所有符号即可。对于完整的解决方案,请参阅下面我的答案。它是有效的!!!这解决了一切。我对你感激不尽。这让我希望学习这些绝妙的技巧会容易得多。
#ifndef HELLOWORLD_HELLO_H
#define HELLOWORLD_HELLO_H
#include "MyLibrary_Export.h"
void MyLibrary_EXPORT sayHI();
#endif //HELLOWORLD_HELLO_H
cmake_minimum_required(VERSION 3.4)
project(helloWorld)
set(CMAKE_CXX_STANDARD 11)
include(GenerateExportHeader)
add_library(
MyLibrary
SHARED
myShared.cpp
myShared.h
MyLibrary_Export.h
)
GENERATE_EXPORT_HEADER(
MyLibrary
BASE_NAME MyLibrary
EXPORT_MACRO_NAME MyLibrary_EXPORT
EXPORT_FILE_NAME MyLibrary_Export.h
STATIC_DEFINE MyLibrary_BUILT_AS_STATIC
)
target_include_directories(MyLibrary PUBLIC "${CMAKE_CURRENT_BINARY_DIR}")
set(SOURCE_FILES main.cpp)
add_executable(mainProgram ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(mainProgram MyLibrary)