La compilation de 32 bits et 64 bits
Je suis en train de compiler du code pour 32 et 64 bits dans la même CMakeLists.txt fichier. J'ai pensé que la meilleure façon de le faire serait d'utiliser une fonction. L' (statique) des bibliothèques utilisées dans la compilation sont également intégrées dans le CMakeLists.txt fichier. Toutefois, en dépit de leur construction dans des répertoires différents, CMake reproche:
add_library cannot create target "mylib" because another target with
the same name already exists. The existing target is a static library
created in source directory "/home/chris/proj".
avec le code de problème:
cmake_minimum_required (VERSION 2.6 FATAL_ERROR)
enable_language(Fortran)
project(myproj)
set(libfolder ${PROJECT_SOURCE_DIR}/lib/)
function(build bit)
message("Build library")
set(BUILD_BINARY_DIR ${PROJECT_BINARY_DIR}/rel-${bit})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BUILD_BINARY_DIR}/bin)
add_library(mylib STATIC ${libfolder}/mylib.for)
set(CMAKE_Fortran_FLAGS "-m${bit}")
endfunction()
build(32)
build(64)
Je suis sûr que je suis absent quelque chose d'évident, mais ne peut pas voir le problème...
Nous avons eu le même problème avec notre logiciel. Nous avons opté pour la solution de créer une option pour décider si il est en 32 ou 64. Et nous construisons 2 fois notre logiciel, dans chaque mode. Je peux vous donner un exemple sur la façon dont nous le faisons.
double possible de la Compilation de 32 bits vs 64 bits de projet utilisation de CMake
double possible de la Compilation de 32 bits vs 64 bits de projet utilisation de CMake
OriginalL'auteur ChrisW | 2013-06-26
Vous devez vous connecter pour publier un commentaire.
Comme je l'ai dit dans mon commentaire, voici un exemple de la façon dont nous l'avons fait.
Cela fonctionne bien pour nous, même dans notre processus de production.
Il permet de ont notre configuration prête pour les deux : 32 et 64 bits. Après que nous avons à construire dans les deux plateforme.
Je ne pas si vous pouvez le faire. Mais vous pouvez utiliser la commande
install
la copie de vos fichiers de résultats pour les répertoires voulu. Nous avons une solution pour que, trop. Je vais essayer de faire un exemple clair de cela.OriginalL'auteur Pierre Fourgeaud
La
<name>
spécifié dansadd_library
correspond à la logique de la cible et doit être unique au monde au sein d'un projet. Par conséquent, vous définissez la même cible (mylib) deux fois, ce qui est interdit.Cependant, vous pouvez définir deux cibles différentes, et spécifier le nom de la sortie de la cible afin de donner le même nom de la bibliothèque à nouveau:
http://www.cmake.org/cmake/help/v3.0/command/add_library.html
http://www.cmake.org/cmake/help/v3.0/command/set_target_properties.html
OriginalL'auteur Robert