c++ - CMake Diferencia entre include_directories y add_subdirectory?
thrift (1)
Estoy aprendiendo CMake para construir código C ++ y luchando con el siguiente concepto. En mi directorio de nivel raíz tengo algunos archivos cpp y un CMakeLists.txt que genera con éxito un código de ahorro en un directorio gen-cpp. Mi nivel de raíz CMakeLists.txt contiene:
include_directories ("path-to-root" / gen-cpp). (Junto con el thrift relevante de autogeneración e incluye.
Todo se compila, pero obtengo errores vinculados a la biblioteca dinámica en tiempo de ejecución para un símbolo no definido que hace referencia a una clase definida en el directorio gen-cpp. Cuando muevo los archivos en el directorio al nivel raíz, se ejecuta bien. ¿Qué me estoy perdiendo? (También ajusté el #include en el directorio raíz cpp directorie s para que apunte a "path-to-root" / gen-cpp).
¿Es este un malentendido el uso de include_directory, donde debería estar usando add_subdirectory? Si es lo último, ¿el código en gen-cpp necesita su propio CMakeLists.txt? ¿Por qué no se necesita este archivo adicional, cuando los contenidos de dicho directorio son de nivel raíz?
El include_directories()
se usa para agregar rutas de búsqueda de encabezados ( -I
flag) y add_subdirectory()
no hará ninguna diferencia en este caso.
Supongo que debe listar los archivos * .cpp de la carpeta gen-cpp en las add_executable()
o add_library()
, en las que desea que add_library()
estos símbolos.
Alternativamente, puede compilar todas las fuentes de ahorro en la biblioteca y vincularlo con su código.