0
我有一個CMake的(大多數是C,有一些C++)項目,其安裝說明如下:如何告訴我的IDE以特定方式編譯我的CMake項目?
mkdir build
cd build
cmake /*some options*/ ../
make
這工作完全,如果我在命令行編譯。
我想使用IDE來編譯這個程序,以便我可以使用圖形調試器進行調試。但是,當我嘗試使用IDE進行編譯時,出現鏈接器錯誤。
我不熟悉CMake的內部運作,所以我不確定如何達到預期的行爲。事實上,我不確定這是否是CMake問題;也許這只是IDE配置的一個問題。如果它有幫助,我使用的IDE是JetBrains的CLion。
CMake的文件是
set(CMAKE_CXX_COMPILER "/Library/Developer/CommandLineTools/usr/bin/c++")
set(CMAKE_C_COMPILER "/Library/Developer/CommandLineTools/usr/bin/cc")
project(mpmc)
cmake_minimum_required(VERSION 3.8)
option(MPI "Use MPI to parallelize the calculations (requires MPI)" OFF)
option(CUDA "Use CUDA to offload polarization calculations to a GPU (requires CUDA)" OFF)
option(OPENCL "Use OpenCL to offload polarization calculations to a GPU (requires OpenCL)" OFF)
option(QM_ROTATION "Enable Quantum Mechanics Rigid Rotator calculations (requires LAPACK)" OFF)
option(VDW "Enable Coupled-Dipole Van der Waals (requires LAPACK)" OFF)
configure_file (
"${PROJECT_SOURCE_DIR}/src/include/cmake_config.h.in"
"${PROJECT_BINARY_DIR}/src/include/cmake_config.h"
)
set(CMAKE_BUILD_TYPE Release)
if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wall")
endif()
set(LIB m)
set(INCLUDE src/include/ src/mersenne/ ${PROJECT_BINARY_DIR}/src/include)
set(SRC
src/mc/mc_moves.c
src/mc/surface_fit_arbitrary.c
src/mc/qshift.c
src/mc/single_point.c
src/mc/mc.c
src/mc/replay.c
src/mc/pimc.c
src/mc/surface.c
src/mc/surf_fit.c
src/mc/fugacity.c
src/mc/cavity.c
src/mc/checkpoint.c
src/histogram/histogram.c
src/energy/lj_buffered_14_7.c
src/energy/bessel.c
src/energy/dreiding.c
src/energy/energy.c
src/energy/polar.c
src/energy/pbc.c
src/energy/disp_expansion.c
src/energy/vdw.c
src/energy/pairs.c
src/energy/bond.c
src/energy/coulombic_gwp.c
src/energy/exp_repulsion.c
src/energy/coulombic.c
src/energy/sg.c
src/energy/lj.c
src/energy/axilrod_teller.cpp
src/mersenne/mt.c
src/mersenne/dSFMT.h
src/mersenne/dSFMT.c
src/mersenne/dSFMT-common.h
src/mersenne/dSFMT-params.h
src/main/quaternion.c
src/main/CArng.c
src/main/memnullcheck.c
src/main/main.c
src/main/cleanup.c
src/main/usefulmath.c
src/io/dxwrite.c
src/io/simulation_box.c
src/io/average.c
src/io/output.c
src/io/check_input.c
src/io/input.c
src/io/mpi.c
src/io/read_pqr.c
src/io/setup_ocl.c
src/polarization/thole_field.c
src/polarization/polar_wolf_lookup.c
src/polarization/thole_polarizability.c
src/polarization/thole_matrix.c
src/polarization/polar_ewald.c
src/polarization/thole_iterative.c
)
if(MPI)
message("-- MPI Enabled")
find_package(MPI REQUIRED)
if(NOT MPI_C_FOUND)
message(FATAL_ERROR "-- MPI not found! Exiting ...")
endif()
set(INCLUDE ${INCLUDE} ${MPI_C_INCLUDE_PATH})
set(LIB ${LIB} ${MPI_C_LIBRARIES})
else()
message("-- MPI Disabled")
endif()
if(CUDA)
message("-- CUDA Enabled")
find_package(CUDA REQUIRED)
set(SRC ${SRC} src/polarization_gpu/polar_cuda.cu)
else()
message("-- CUDA Disabled")
endif()
if(OPENCL)
message("-- OpenCl Enabled")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
find_package(OpenCL REQUIRED)
if(NOT OPENCL_FOUND)
message(FATAL_ERROR "--OpenCl not found! Exiting ...")
endif()
set(SRC ${SRC}
src/polarization_gpu/polar_ocl.c
src/io/setup_ocl.c)
set(INCLUDE ${INCLUDE} ${OpenCL_INCLUDE_DIRS})
set(LIB ${LIB} ${OpenCL_LIBRARIES})
else()
message("-- OpenCl Disabled")
endif()
if(QM_ROTATION)
message("-- QM Rotation Enabled")
set(SRC ${SRC}
src/quantum_rotation/rotational_basis.c
src/quantum_rotation/rotational_eigenspectrum.c
src/quantum_rotation/rotational_integrate.c
src/quantum_rotation/rotational_potential.c)
set(LIB ${LIB} lapack)
else()
message("-- QM Rotation Disabled")
endif()
if(VDW)
message("-- CDVDW Enabled")
if(NOT QM_ROTATION)
set(LIB ${LIB} lapack)
endif()
else()
message("-- CDVDW Disabled")
endif()
include_directories(${INCLUDE})
if(CUDA)
cuda_add_executable(${PROJECT_NAME} ${SRC})
else()
add_executable(${PROJECT_NAME} ${SRC})
endif()
target_link_libraries(${PROJECT_NAME} ${LIB})
if(MPI)
if(MPI_C_COMPILE_FLAGS)
set_target_properties(${PROJECT_NAME} PROPERTIES
COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}")
endif()
if(MPI_C_LINK_FLAGS)
set_target_properties(${PROJECT_NAME} PROPERTIES
LINK_FLAGS "${MPI_C_LINK_FLAGS}")
endif()
endif()
如果你提供一個'CMakeLists.txt'的例子來重現這個問題,或者甚至連接器錯誤都會有所幫助,這將有所幫助。 –
@CinderBiscuits抱歉。信息添加。 – Luciano