CMake l'ajout de bibliothèques pour Windows/Linux

Visual Studio C++ 2008 /GCC 4.4.2

J'ai écrit un programme pour fonctionner sur Linux et maintenant, j'ai de port mon code à exécuter sur Windows. J'ai décidé d'utiliser CMake que je veux garder le même système de construction pour les deux plates-formes.

Cependant, j'ai besoin de faire un lien avec certaines bibliothèques pour les deux plates-formes. Dans mon CMakeLists.txt j'ai le texte suivant:

# 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)

Cependant, quand je compile sur Visual Studio, j'obtiens l'erreur suivante:

fatal error C1083: Cannot open source file: 'ws2_32.lib': No such file or directory

Que puis-je faire pour résoudre ce problème?

========= Modifier
Dans le répertoire de niveau supérieur

# 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)

Dans le sous-répertoire de client, j'ai ceci CMakeLists.txt

# libray called client from client.c
ADD_LIBRARY(client client)

Et dans le sous-répertoire de test_clt où je créer et établir un lien de mon exécutable.

# 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)
Quelle est la version de CMAKE?
J'utilise CMake 2.8.0
supprimer: SI(WIN32) SET(CMAKE_C_FLAGS "ws2_32") ENDIF(WIN32)
Oui, cela a fonctionné. Merci.
Ce serait sympa de vous, alors, de donner ma réponse ci-dessous un +1, donc s'éloigne de -1.

OriginalL'auteur ant2009 | 2010-02-27