【发布时间】:2023-03-28 19:09:01
【问题描述】:
Visual Studio C++ 2008 / GCC 4.4.2
我已经编写了一个在 Linux 上运行的程序,现在我必须移植我的代码以在 Windows 上运行。我决定使用CMake,因为我想为两个平台保持相同的构建系统。
但是,我需要链接两个平台的一些库。在我的 CMakeLists.txt 我有以下内容:
# Compile with gcc c89 standard
IF(CMAKE_COMPILER_IS_GNUCXX)
MESSAGE(STATUS "GCC detected - Adding compiler flags")
SET(CMAKE_C_FLAGS "-pthread -ggdb -Wextra -Wall -pedantic -std=c89")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
IF(WIN32)
SET(CMAKE_C_FLAGS "ws2_32.lib")
ENDIF(WIN32)
但是,当我在 Visual Studio 上编译时,出现以下错误:
fatal error C1083: Cannot open source file: 'ws2_32.lib': No such file or directory
我可以做些什么来解决这个问题?
========= 编辑 在顶级目录中
# Project Client Server
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# Name of project
PROJECT(CLIENT_SERVER)
# Compile with gcc c89 standard
IF(CMAKE_COMPILER_IS_GNUCXX)
MESSAGE(STATUS "GCC detected - Adding compiler flags")
SET(CMAKE_C_FLAGS "-pthread -ggdb -Wextra -Wall -pedantic -std=c89")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
IF(WIN32)
SET(CMAKE_C_FLAGS "ws2_32")
ENDIF(WIN32)
# Includes
INCLUDE_DIRECTORIES(${CLIENT_SERVER_SOURCE_DIR}/cltsvr_ults)
INCLUDE_DIRECTORIES(${CLIENT_SERVER_SOURCE_DIR}/server)
INCLUDE_DIRECTORIES(${CLIENT_SERVER_SOURCE_DIR}/client)
# libraries
LINK_DIRECTORIES($CLIENT_SERVER/cltsvr_ults)
# Add subdirectories
ADD_SUBDIRECTORY(client)
ADD_SUBDIRECTORY(server)
ADD_SUBDIRECTORY(cltsvr_ults)
ADD_SUBDIRECTORY(test_client)
ADD_SUBDIRECTORY(test_server)
在客户端的子目录中我有这个 CMakeLists.txt
# libray called client from client.c
ADD_LIBRARY(client client)
在我创建和链接我的可执行文件的 test_clt 的子目录中。
# Test client add executable
INCLUDE_DIRECTORIES($CLIENT_SERVER_SOURCE_DIR/client)
INCLUDE_DIRECTORIES($CLIENT_SERVER_SOURCE_DIR/cltsvr_ults)
# Link the library
LINK_DIRECTORIES($CLIENT_SERVER/client)
# Add the executable
ADD_EXECUTABLE(clt test_clt)
# Link the executable to the client library
IF(WIN32)
TARGET_LINK_LIBRARIES(clt client ws2_32)
ENDIF(WIN32)
【问题讨论】:
-
删除:IF(WIN32) SET(CMAKE_C_FLAGS "ws2_32") ENDIF(WIN32)
-
那你太好了,我的回答低于+1,所以远离-1。
标签: cmake