2011-02-11 76 views
9

比方說,我有一個僞標準的目錄結構簡單的hello項目運行CMake的與「標準」的目錄結構(Linux)的

cd ~/helloworld/build 
cmake .. 
make 

helloworld/ 
    src/ 
    main.c 
    say.c 
    say-helper.c 
    include/ 
    say.h 
    say-helper.h 
    build/ 

,我會想到以下

helloworld/ 
    build/lib/ 
    libsay.a 
    libsay.so 
    libsay.so.1.0.0 
    tmp/obj/ 
    main.o 
    say.o 
    build/bin/ 
    hello 

make install後,我希望

/usr/local/lib/ 
    libsay.a 
    libsay.so 
    libsay.so.1.0.0 
/usr/local/bin/ 
    hello 

CMakeLists.txt對於此設置會是什麼樣子?

我一直在尋找示例,但我發現的唯一一個顯示如何添加庫和可執行文件無法正常工作。

回答

8

基本命令來描述項目:

INCLUDE_DIRECTORIES(include) 
ADD_LIBRARY(say src/say.c src/say-helper.c) 

ADD_EXECUTABLE(hello src/main.c) 
TARGET_LINK_LIBRARIES(hello say) 

這是放置庫,並在生成目錄的可執行程序,把在你的CMakeLists.txt:

SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) 
SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) 
SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) 

爲您安裝指定

install(TARGETS say hello 
      RUNTIME DESTINATION bin 
      LIBRARY DESTINATION lib 
      ARCHIVE DESTINATION lib) 
在你的CMakeLists.txt

,並設置在CMAKE_INSTALL_PREFIX你的同事到/ usr /本地nfiguration。

雖然我不確定是否可以同時創建具有相同名稱的靜態和動態庫。我不知道如何告訴CMake把obj文件放在某個特定的位置。