c++ - visual - ¿Construye bibliotecas de 32 y 64 bit para impulsar al mismo tiempo?
sistema operativo de 32 bits procesador x64 (3)
¿La opción "--address-model = 32,64" compilará tanto bibliotecas 32 como 64 o tiene que hacer dos compilaciones separadas?
La documentación dice (el énfasis es mío):
"Solicita explícitamente la generación de código de 32 bits o de 64 bits".
Tenga en cuenta que no dice "uno o más de" o "al menos uno de", dice que ... o bien, lo que implica XOR en mi lectura y su experiencia coincide con eso.
La coma en la lista de valores permitidos es solo para separar los dos elementos en el conjunto de valores permitidos.
Obra:
b2 address-model=32,64
O..
b2 address-model=32,64,32_64
Trabaja y produce, según el conjunto de herramientas y el soporte de la plataforma, objetivos de 32 y 64 bits en el primer caso. Y 32, 64 y 32 + 64 objetivos universales (muy probablemente solo en OSX usando el conjunto de herramientas de darwin
. Y por "funciona" quiero decir que lo probé con mi biblioteca de Boost en OSX con el conjunto de herramientas de darwin
. Por lo tanto, sospecho que tiene su sintaxis es incorrecta, es decir, no use "--name = values" ya que no son opciones, sino que use "name = values" son las especificaciones de los requisitos.
Terminé haciendo lo siguiente:
- Almacene las 32 compilaciones de lib / dll en una carpeta separada llamada / lib32
- Almacene las 64 compilaciones lib / dll en una carpeta SeaPrate llamada / lib64
Ambas están preferiblemente en una ruta de búsqueda que el impulso ya está revisando, como el escenario o la carpeta de instalación .
Luego agregué este bloque justo después de ensamblar las rutas de búsqueda debajo del encabezado (el archivo FindBoost.cmake para editar está en la carpeta share / cmake-3.1 / Modules / en la carpeta de instalación de CMake)
Comience a encontrar bibliotecas de impulso
...
if (Boost_LIBRARY_DIR)
...
terminara si()
#generate 32 and 64 bit paths
if(WIN32)
if(CMAKE_CL_64)
#message("Finding BOOST on windows platform (64 bit)")
SET(BOOST_libdir_suffix_gen "64")
else()
#message("Finding BOOST on windows platform (32 bit)")
SET(BOOST_libdir_suffix_gen "32")
endif()
list(APPEND _boost_LIBRARY_SEARCH_DIRS_PLATFORMS "")
foreach(SEARCH_DIR_NOPLATFORM ${_boost_LIBRARY_SEARCH_DIRS})
list(APPEND _boost_LIBRARY_SEARCH_DIRS_PLATFORMS ${SEARCH_DIR_NOPLATFORM}${BOOST_libdir_suffix_gen})
endforeach()
foreach(SEARCH_DIR_PLATFORM ${_boost_LIBRARY_SEARCH_DIRS_PLATFORMS})
list (APPEND _boost_LIBRARY_SEARCH_DIRS ${SEARCH_DIR_PLATFORM})
endforeach()
else()
# no generation required (?)
endif()
Volverá a agregar todos los directorios lib existentes a la ruta de búsqueda de impulso para bibliotecas, con el sufijo de una etiqueta de extensión de 64 o 32 bits. Esto selecciona las librerías de destino correctas para vincular, y puede regenerar de forma segura cualquier otra biblioteca de cmake dependiente (como CGAL) para una compilación de destino de 32 o 64 sin restablecer la ruta de dependencia de impulso.