web-dev-qa-db-ja.com

Cmakeを使用して実行可能でリンク可能な共有ライブラリを構築する

cmakeを使用してexecutable shared-libraryを作成するにはどうすればよいですか?

何かのようなもの:

libtest.so ::リンク可能な共有ライブラリ

libtest.so ::実行可能ファイル

注:gcc/g ++オプションは同じことを達成することが知られています( https://unix.stackexchange.com/a/223411/152034 )。しかし、ソリューションにはcmakeの方法が必要です

1
parasrish

注:これに関する最初の情報は、cmakeに関連するオープンな 問題 があるようです。 したがって、これは同じことを達成するための間接的な解決策と見なすことができます。

次に、cmakeを使用して図に従います。

test.cpp

#include <stdio.h>                  

void sayHello (char *tag) {         
    printf("%s: Hello!\n", tag);    
}                                

int main (int argc, char *argv[]) { 
    sayHello(argv[0]);              
    return 0;                       
}

ttest/test_test.cpp

#include <stdio.h>                  

extern void sayHello (char*);

int main (int argc, char *argv[]) { 

    printf("\nNow Inside test-test !\n");    

    sayHello(argv[0]);              
    return 0;                       
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(pie_test)

#shared-lib as executable
add_library(${PROJECT_NAME} SHARED
            test.cpp
)
target_compile_options(${PROJECT_NAME} PUBLIC "-pie")
target_link_libraries(${PROJECT_NAME} "-pie -Wl,-E")
set_property(TARGET ${PROJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE 1)

#executable linking to the executable-shared-library
add_executable(test_test
               ttest/test_test.cpp
)
target_link_libraries(test_test pie_test)
set_property(TARGET test_test PROPERTY POSITION_INDEPENDENT_CODE 1)

build.sh

#!/bin/bash

rm -rf build
mkdir build

cd build
cmake .. #--debug-output

make VERBOSE=1
echo "Done!"
echo ""

Gcc-optionsのリファレンス ここ

2
parasrish