使用静态库手工制作Makefile到Cmake

时间:2017-04-08 19:34:32

标签: cmake

这是我的项目的MakeFile,因为我使用CLion作为我的IDE,我需要一个Cmake配置。我无法正确转换以下Makefile。

all: VisualCryptography

VisualCryptography: VisualCryptographyGPU.o VisualCryptographyMC.o ExtVisualCryptographyCPU.o ExtVisualCryptographyGPU.o ExtVisualCryptographyMC.o VisualCryptographyCPUTest.o

g++ *.o  -L/usr/local/cuda/lib64 -lcudart -lpthread ./lib/libVC.a -o VisualCryptography
rm -rf *.o

VisualCryptographyMC.o: ./source/VisualCryptographyMC.c
g++ -lpthread -c ./source/VisualCryptographyMC.c

VisualCryptographyCPUTest.o: ./source/VisualCryptographyCPUTest.c
g++ -lpthread -c ./source/VisualCryptographyCPUTest.c

VisualCryptographyGPU.o: ./source/VisualCryptographyGPU.cu
/usr/local/cuda/bin/nvcc -c -arch=compute_20 -code=sm_20 -lm ./source/VisualCryptographyGPU.cu

ExtVisualCryptographyCPU.o: ./source/ExtVisualCryptographyCPU.c
g++ -c ./source/ExtVisualCryptographyCPU.c

ExtVisualCryptographyGPU.o: ./source/ExtVisualCryptographyGPU.cu
/usr/local/cuda/bin/nvcc -c -arch=compute_20 -code=sm_20 -lm ./source/ExtVisualCryptographyGPU.cu

ExtVisualCryptographyMC.o: ./source/ExtVisualCryptographyMC.c
g++ -lpthread -c ./source/ExtVisualCryptographyMC.c

clean:
rm -rf *.o VisualCryptography

这是我的CMakeList.txt文件:

cmake_minimum_required(VERSION 3.7)
project(VC)

set(CMAKE_CXX_STANDARD 11)
find_package (Threads)
find_package(CUDA REQUIRED)
link_directories(${CMAKE_BINARY_DIR}/lib)
set(SOURCE_FILES
    source/common.h
    source/ExtVisualCryptographyGPU.cu
    source/ExtVisualCryptographyCPU.c
    source/ExtVisualCryptographyMC.c
    source/preprocess.h
    source/VisualCryptographyCPUDefault.h
    source/VisualCryptographyCPUTest.c
    source/VisualCryptographyCPUTest.h
    source/VisualCryptographyMC.c
    source/VisualCryptographyGPU.cu
    source/VisualCryptographyGPU.h
    source/VisualCryptographyMC.h)
add_executable(VC ${SOURCE_FILES})
target_link_libraries(VC ${CMAKE_THREAD_LIBS_INIT} libVC.a)

我在哪里做错了?

这是我得到的错误:

/usr/bin/ld: cannot find -lVC
collect2: error: ld returned 1 exit status
CMakeFiles/VC.dir/build.make:172: recipe for target 'VC' failed
make[3]: *** [VC] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/VC.dir/all' failed
make[2]: *** [CMakeFiles/VC.dir/all] Error 2
CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/VC.dir/rule' failed
make[1]: *** [CMakeFiles/VC.dir/rule] Error 2
Makefile:118: recipe for target 'VC' failed
make: *** [VC] Error 2

我还应该注意,libVC.a位于我项目的lib子目录中,所有其他源代码都在源子目录中。主要功能也在libVC.a中,这是静态的。

1 个答案:

答案 0 :(得分:0)

尝试按照oLen的建议更改名称,此行为在某些版本的Cmake中可见。如果您坚持使用相同的名称,则可以检查其他版本。